使用 XslTransform 類別進行 XSLT 轉換

更新: November 2007

注意事項:

XslTransform 類別在 .NET Framework 2.0 版 中已過時。您可以使用 XslCompiledTransform 類別來執行可延伸樣式表語言轉換 (XSLT)。如需詳細資訊,請參閱 使用 XslCompiledTransform 類別從 XslTransform 類別轉換

XSLT 的目的在於,將來源 XML 文件的內容轉換為使用不同格式或結構的其他文件 (例如,將 XML 轉換為 HTML 以供網站使用,或將 XML 轉換為僅含某個應用程式所需之欄位的文件)。這項轉換程序是由位於 www.w3.org/TR/xslt 的全球資訊網協會 (W3C) XSLT 1.0 版建議事項所指定。在 .NET Framework 中,是由 System.Xml.Xsl 命名空間中的 XslTransform 類別做為實作此規格之功能的 XSLT 處理器。W3C XSLT 1.0 版建議事項中有少數功能未被實作,列示於 XslTransform 的輸出中。下圖說明 .NET Framework 的架構轉換作業。

概觀

轉換架構

XSLT 轉換架構

XSLT 建議事項使用 XML 路徑語言 (XPath) 來選擇 XML 文件的一部分,其中 XPath 是用來巡覽文件樹狀結構節點的查詢語言。如圖所示,XPath 的 .NET Framework 實作可用來選取數種類別中所儲存的部份 XML,如 XmlDocumentXmlDataDocumentXPathDocumentXPathDocument 是最佳化的 XSLT 資料存放區,當它與 XslTransform 搭配使用時,可在 XSLT 轉換期間提供最佳效能。

下列表格列出與 XslTransform 和 XPath 搭配使用時最常用的類別及其函式。

類別或介面

函式

XPathNavigator

它是 API,為巡覽存放區提供了游標樣式模式以及 XPath 查詢支援。它並未提供基礎存放區的編輯。若要進行編輯,請使用 XmlDocument 類別。

IXPathNavigable

此介面可將 CreateNavigator 方法提供給 XPathNavigator,以進行儲存。

XmlDocument

它使得能夠編輯文件。它可實作 IXPathNavigable,以達成後續需進行 XSLT 轉換的文件編輯案例。如需詳細資訊,請參閱 XslTransform 的 XmlDocument 輸入

XmlDataDocument

它衍生自 XmlDocument。它使用 DataSet,並根據 DataSet 上的指定對應,對 XML 文件內的結構化資料儲存進行最佳化,藉以聯絡關聯式領域與 XML 領域。它會實作 IXPathNavigable,以達成 XSLT 轉換可在擷取自資料庫之關聯式資料上執行的案例。如需詳細資訊,請參閱 XML 與關聯式資料和 ADO.NET 互相整合

XPathDocument

此類別已針對 XslTransform 處理與 XPath 查詢進行最佳化,並可提供高效能的唯讀快取。它會實作 IXPathNavigable,是進行 XSLT 轉換時適用的存放區。

XPathNodeIterator

它提供跨 XPath 節點集的巡覽。XPathNavigator 上的所有 XPath 選取方法都會傳回 XPathNodeIterator。相同的存放區上可建立多個 XPathNodeIterator 物件,而每個物件各代表一個選取的節點集。

MSXML XSLT 擴充

XslTransform 類別所支援的 Microsoft XML Core Services (MSXML) XSLT 擴充只有 msxsl:script 和 msxsl:node-set 這兩個函式。

範例

下列程式碼範例會載入 XSL 樣式表、將名為 mydata.xml 的檔案讀取至 XPathDocument,並且在名為 myStyleSheet.xsl 之虛擬檔案的資料上執行轉換,然後將格式化的輸出傳送給主控台。

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Imports System.Xml.Xsl

Public Class Sample
    Private filename As [String] = "mydata.xml"
    Private stylesheet As [String] = "myStyleSheet.xsl"

    Public Shared Sub Main()
        Dim xslt As New XslTransform()
        xslt.Load(stylesheet)
        Dim xpathdocument As New XPathDocument(filename)
        Dim writer As New XmlTextWriter(Console.Out)
        writer.Formatting = Formatting.Indented

        xslt.Transform(xpathdocument, Nothing, writer, Nothing)
    End Sub 'Main
End Class 'Sample
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

public class Sample 
{
    private const String filename = "mydata.xml";
    private const String stylesheet = "myStyleSheet.xsl";

    public static void Main() 
    {
    XslTransform xslt = new XslTransform();
    xslt.Load(stylesheet);
    XPathDocument xpathdocument = new
    XPathDocument(filename);
    XmlTextWriter writer = new XmlTextWriter(Console.Out);
    writer.Formatting=Formatting.Indented;

    xslt.Transform(xpathdocument, null, writer, null);    
    }
}

請參閱

概念

XslTransform 類別實作 XSLT 處理器

XslTransform 類別中的 Discretionary 行為實作

轉換中的 XPathNavigator

轉換中的 XPathNodeIterator

XslTransform 的 XPathDocument 輸入

XslTransform 的 XmlDataDocument 輸入

XslTransform 的 XmlDocument 輸入

參考

XslTransform