如何: 管線.NET 應用程式中的 XSLT 轉換

文章翻譯 文章翻譯
文章編號: 320847 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何以管線.NET 應用程式中的 XSL 轉換 (XSLT) 轉換。詞彙"管線"的 XSLT 轉換內容中,是處理程序所用資料來源可延伸標記語言 」 (XML) 文件中的以累加方式轉換由一連串的兩個或兩個以上的 XSLT 樣式表來產生最終的必要的輸出。在程序期間由轉換管線中每個中繼階段所產生的輸出當做輸入到在下列階段所有透過方式至最終的轉換階段,會產生您想要的輸出。

.NET Framework 類別 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. 若要建立並加入 XSLT 樣式表稱為"sortEmployees.xslt"(不含引號) 至專案,請使用下列程式碼。這個樣式表包含在 Employees.xml XML 文件中排序資料的 XSLT 程式碼 (依遞減順序家族名稱 [員工、 名稱和家人] 上的項目)。當您套用此樣式表時,就會產生的輸出是 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. 若要建立並加入 XSLT 樣式表稱為"EmployeesHTMLTable.xslt"(不含引號) 至專案,請使用下列程式碼。這個樣式表包含 XSLT 程式碼來轉換來源 (也就包含在 Employees.xml XML 文件或排序您將 sortEmployees.xsl XSLT 樣式表套用至 Employees.xml XML 文件時,就會產生的 XML) 的員工 XML 資料至 「 超文字標記語言 (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 會產生的來源 XML HTML 表格表示排序。若要取得依家族名稱以遞減順序排序資料的 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
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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