如何: 管线在.net 应用程序中的 XSLT 转换

文章翻译 文章翻译
文章编号: 320847 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文演示如何在.net 应用程序中的 XSL 转换 (XSLT) 转换的管道。该术语的 XSLT 转换上下文中的"管道"传送,是由两个或多个 XSLT 样式表生成最终的所需的输出的序列源可扩展标记语言 (XML) 文档中的数据以增量方式转换的过程。在过程由转换管道中的每个中间阶段生成的输出,将使用作为以下阶段所有通过该方法最终转换阶段的输入生成所需的输出。

.NET 框架类 System.Xml.XslSystem.Xml.XPathSystem.IO 命名空间中的可用于以编程方式在.net 应用程序中的 XSLT 转换的管道。本文的以下各节提供了帮助您实施和检查的管道传送在 ASP.NET 应用程序中的 XSLT 转换过程的说明。此外可以应用和其他类型的管道的 XSLT 转换的.net 应用程序中使用图示的概念。

创建和设置示例 ASP.NET 应用程序

  1. 若要创建新的 Microsoft Visual Basic.net ASP.NET Web 应用程序项目使用 Visual Studio.net 命名"XSLTPipelineDemo"(不带引号)。
  2. 使用下面的代码创建并添加到项目中称为 Employees.xml (不带引号) 的 XML 文档:
    <?xml version='1.0'?>
    <employees>
      <employee>
        <employeeId>1</employeeId>
        <name>
          <given>Nancy</given>
          <family>Davolio</family>
        </name>
      </employee>
      <employee>
        <employeeId>2</employeeId>
        <name>
          <given>Andrew</given>
          <family>Fuller</family>
        </name>
      </employee>
      <employee>
        <employeeId>3</employeeId>
        <name>
          <given>Janet</given>
          <family>Leverling</family>
        </name>
      </employee>  
    </employees>
    					
  3. 使用下面的代码创建并添加名为"sortEmployees.xslt"(不带引号) 到项目的 XSLT 样式表。此样式表包含 XSLT 代码 Employees.xml XML 文档中的数据进行排序 (按降序顺序,在系列名称 [员工、 名称,和系列] 上元素)。当您应用此样式表时生成的输出是源 XML 数据的排序的版本:
    <?xml version='1.0'?>
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:param name="sortColumn" select="'family'"/>
    <xsl:param name="sortOrder" select="'descending'"/>
    
    
    <xsl:template match="employees">
       <employees>
    
       <xsl:apply-templates select="employee/name">  
           <xsl:sort select="./*[local-name() = $sortColumn]" order="{$sortOrder}"/>            
       </xsl:apply-templates>  
    
       </employees>
    </xsl:template> 
    
    <xsl:template match="employee/name">
      <employee>
    	  <xsl:copy-of select="parent::node()/*"/>
      </employee>  
    </xsl:template> 
    
    </xsl:stylesheet>
    					
  4. 使用下面的代码创建并添加到项目中称为 EmployeesHTMLTable.xslt (不带引号) 的 XSLT 样式表。此样式表包含源 Employees.xml XML 文档中或在已排序 sortEmployees.xsl XSLT 样式表应用于 Employees.xml XML 文档时生成的 XML 包含) 的雇员 XML 数据转换的 XSLT 代码超文本标记语言 (HTML) 的表:
    <?xml version='1.0'?>
    
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:template match="employees">
    	<HTML>
    	<BODY>
    	<TABLE BORDER="1">
    	<TR>
    	  <TH>Employee ID</TH>
    	  <TH>Employee Name</TH>
    	</TR>
    
    	<xsl:for-each select="employee">
    		<TR>
      		  <TD>
    		     <xsl:value-of select="employeeId"/>
    		  </TD>
    		  <TD>
    		     <xsl:value-of select="name/family"/>, <xsl:value-of select="name/given"/>
    		  </TD>
    		</TR>
    	</xsl:for-each>
    
    	</TABLE>
    	</BODY>
    	</HTML>   
    </xsl:template> 
    
    </xsl:stylesheet>
    
    					
  5. 您可以将这两个独立于另一个在 XSLT 样式表应用于 Employees.xml 文件中。应用 sortEmployees.xsl 对 Employees.xml 文件中的数据进行排序,而应用 employeesHTMLTable.xsl 生成的 HTML 表表示形式的源 XML。若要获取按递减顺序排序的系列名称数据的一个 HTML 表表示,管道这些两个 XSLT 转换 (第一次将 sortEmployees.xsl 应用于 Employees.xml 文件,然后将 employeesHTMLTable.xsl 应用于第一个转换所生成的输出)。
  6. 复制并粘贴以下代码在 Page_Load 事件过程中的实现前面描述的管道传送的 WebForm1.aspx
    'Load the source XML document (Employees.xml) into an XPathDocument object.
    
    Dim xmlDoc As New System.Xml.XPath.XPathDocument(Server.MapPath("employees.xml"))
    
    'Load the first stylesheet (sortEmployees.xslt) that sorts the data in employees.xml
    'into an XslTransform object.
    
    Dim xslt As New System.Xml.Xsl.XslTransform()
    xslt.Load(Server.MapPath("sortEmployees.xslt"))
    
    'Execute the first transformation and write the interim output (the sorted XML)
    'to a MemoryStream object. Using an in memory stream (as opposed to a FileStream object) 
    'to store the interim output generated by the first transformation is a better option from  
    'a performance standpoint as it avoids unnecessary disk I/O.
    
    Dim memStream As New System.IO.MemoryStream()
    xslt.Transform(xmlDoc, Nothing, memStream)
    
    'Reset the MemoryStream internal pointer to point to the 
    'beginning of the stream. This is required for the following line of 
    'code to be able to read the data from the memory stream.
    
    memStream.Position = 0
    
    'Load the interim sorted XML output in an XPathDocument object. 
    'Notice that a second XPathDocument object is created to do this. 'The reason for this is that the XPathDocument class does not implement a Load 'method (like the System.Xml.XmlDocument class) that can be used to re-load new XML data into an existing 
    'object instance. While a single XmlDocument object could have been used to execute the two pipelined 'transformations in this sample, it has not been chosen because the XPathDocument is highly optimized for XPath query 
    'execution and XSLT transformations. It is the recommended interface to use when programatically executing 
    'XSLT transformations in .NET applications.
    
    Dim interimDoc As New System.Xml.XPath.XPathDocument(memStream)
    
    'Load the second stylesheet(employeesHTMLTable.xslt)that transforms the sorted data to an HTML table
    'into the XslTransform object.
    
    xslt.Load(Server.MapPath("employeesHTMLTable.xslt"))
    
    'Execute the second transformation and stream the output directly to the 
    'ASP.Net Response object's OutputStream to display the results in the client browser.
    
    xslt.Transform(interimDoc, Nothing, Response.OutputStream)
    					
  7. 保存并生成解决方案。

测试示例 ASP.NET 应用程序

  1. 执行 XSLTPiplelineDemo ASP.NET 应用程序启动并在浏览器中显示 WebForm1.aspx
  2. Page_Load 事件过程中的 WebForm1.aspx 代码运行 XSLT 转换并生成输出 (以降序顺序对系列名称) 显示一个已排序的 HTML 表的窗体中员工的列表。
  3. 关闭浏览器窗口退出 ASP.NET 应用程序。

属性

文章编号: 320847 - 最后修改: 2003年9月4日 - 修订: 3.2
这篇文章中的信息适用于:
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
关键字:?
kbmt kbbcl kbhowtomaster KB320847 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 320847
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com