XslCompiledTransform 類別

定義

使用 XSLT 樣式表轉換 XML 資料。

public ref class XslCompiledTransform sealed
public sealed class XslCompiledTransform
type XslCompiledTransform = class
Public NotInheritable Class XslCompiledTransform
繼承
XslCompiledTransform

範例

下列範例會執行檔案的轉換和輸出。

// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("output.xsl");

// Execute the transform and output the results to a file.
xslt.Transform("books.xml", "books.html");
' Load the style sheet.
Dim xslt As New XslCompiledTransform()
xslt.Load("output.xsl")
        
' Execute the transform and output the results to a file.
xslt.Transform("books.xml", "books.html")

此範例使用下列兩個輸入檔:

books.xml

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

output.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="bookstore">
  <HTML>
    <BODY>
      <TABLE BORDER="2">
        <TR>
          <TD>ISBN</TD>
          <TD>Title</TD>
          <TD>Price</TD>
        </TR>
        <xsl:apply-templates select="book"/>
      </TABLE>
    </BODY>
  </HTML>
</xsl:template>
<xsl:template match="book">
  <TR>
    <TD><xsl:value-of select="@ISBN"/></TD>
    <TD><xsl:value-of select="title"/></TD>
    <TD><xsl:value-of select="price"/></TD>
  </TR>
</xsl:template>
</xsl:stylesheet>

備註

類別 XslCompiledTransform 是支援 XSLT 1.0 語法的 XSLT 處理器。 這是新的實作,相較于過時 XslTransform 的類別,它包含效能提升。 類別的結構 XslCompiledTransform 與 類別非常類似 XslTransform 。 方法 Load 會載入並編譯樣式表單,而 Transform 方法則會執行 XSLT 轉換。

預設會停用 XSLT document() 函式和內嵌腳本區塊的支援。 您可以藉由建立 XsltSettings 物件並將它傳遞至 Load 方法,來啟用這些功能。

如需詳細資訊,請參閱 使用 XslCompiledTransform 類別從 XslTransform 類別移轉。

安全性考量

建立使用 XslCompiledTransform 類別的應用程式時,您應留意下列項目及其含意:

  • 依預設會停用 XSLT 指令碼。 僅當需要指令碼支援且在完全受信任的環境中運作時,才應啟用 XSLT 指令碼。

  • 依預設會停用 XSLT document() 函式。 如果您啟用 document() 函式,則藉由傳遞 XmlSecureResolver 物件至 Transform 方法,限制可存取的資源。

  • 依預設會啟用擴充物件。 如果將包含擴充物件的 XsltArgumentList 物件傳遞到 Transform 方法,則會加以利用。

  • XSLT 樣式表可以包含其他檔案及內嵌指令碼區塊的參考。 居心不良的使用者會利用這一點,藉由提供您資料或樣式表,使您因執行他們而導致系統持續處理,直到電腦資源不足,來進行攻擊。

  • 在混合的信任環境中執行的 XSLT 應用程式,會產生用於詐騙的樣式表。 例如,居心不良的使用者可載入含有害樣式表的物件,然後將其傳遞給另一使用者,該使用者隨後會呼叫 Transform 方法並執行轉換。

不啟用指令碼或 document() 函式 (除非樣式表來自信任的來源),不接受來自不受信任來源的 XslCompiledTransform 物件、XSLT 樣式表或 XML 來源資料,可減輕這些安全性問題。

建構函式

XslCompiledTransform()

初始化 XslCompiledTransform 類別的新執行個體。

XslCompiledTransform(Boolean)

使用指定的偵錯設定,初始化 XslCompiledTransform 類別的新執行個體。

屬性

OutputSettings

取得 XmlWriterSettings 物件,其中包含衍生自樣式表之 xsl:output 元素的輸出資訊。

TemporaryFiles

取得 TempFileCollection,包含成功呼叫 Load 方法後,在磁碟上產生的暫存檔案。

方法

CompileToType(XmlReader, XsltSettings, XmlResolver, Boolean, TypeBuilder, String)

將 XSLT 樣式表編譯為指定的類型。

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
Load(IXPathNavigable)

編譯包含在 IXPathNavigable 物件中的樣式表。

Load(IXPathNavigable, XsltSettings, XmlResolver)

編譯包含在 IXPathNavigable 中的 XSLT 樣式表。 XmlResolver 會解析所有 XSLT importinclude 元素,且 XSLT 設定會決定樣式表的權限。

Load(MethodInfo, Byte[], Type[])

從使用 XSLTC.exe 公用程式編譯的樣式表中載入方法。

Load(String)

載入並編譯位於指定之 URI 的樣式表。

Load(String, XsltSettings, XmlResolver)

載入並編譯 URI 所指定的 XSLT 樣式表。 XmlResolver 會解析所有 XSLT importinclude 元素,且 XSLT 設定會決定樣式表的權限。

Load(Type)

載入已編譯的樣式表,此樣式表是使用 XSLT 編譯器 (xsltc.exe)所建立的。

Load(XmlReader)

編譯包含在 XmlReader 中的樣式表。

Load(XmlReader, XsltSettings, XmlResolver)

編譯包含在 XmlReader 中的 XSLT 樣式表。 XmlResolver 會解析所有 XSLT importinclude 元素,且 XSLT 設定會決定樣式表的權限。

MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)
Transform(IXPathNavigable, XmlWriter)

使用 IXPathNavigable 物件所指定的輸入文件執行轉換,並將結果輸出至 XmlWriter

Transform(IXPathNavigable, XsltArgumentList, Stream)

使用 IXPathNavigable 物件所指定的輸入文件執行轉換,並將結果輸出至資料流。 XsltArgumentList 會提供額外的執行階段引數。

Transform(IXPathNavigable, XsltArgumentList, TextWriter)

使用 IXPathNavigable 物件所指定的輸入文件執行轉換,並將結果輸出至 TextWriterXsltArgumentList 會提供額外的執行階段引數。

Transform(IXPathNavigable, XsltArgumentList, XmlWriter)

使用 IXPathNavigable 物件所指定的輸入文件執行轉換,並將結果輸出至 XmlWriterXsltArgumentList 會提供額外的執行階段引數。

Transform(IXPathNavigable, XsltArgumentList, XmlWriter, XmlResolver)

使用 IXPathNavigable 物件所指定的輸入文件執行轉換,並將結果輸出至 XmlWriterXsltArgumentList 會提供額外的執行階段引數,且 XmlResolver 會解析 XSLT document() 函式。

Transform(String, String)

使用 URI 所指定的輸入文件執行轉換,並將結果輸出至檔案。

Transform(String, XmlWriter)

使用 URI 所指定的輸入文件執行轉換,並將結果輸出至 XmlWriter

Transform(String, XsltArgumentList, Stream)

使用 URI 所指定的輸入文件執行轉換,並將結果輸出至資料流。 XsltArgumentList 會提供額外的執行階段引數。

Transform(String, XsltArgumentList, TextWriter)

使用 URI 所指定的輸入文件執行轉換,並將結果輸出至 TextWriter

Transform(String, XsltArgumentList, XmlWriter)

使用 URI 所指定的輸入文件執行轉換,並將結果輸出至 XmlWriterXsltArgumentList 會提供額外的執行階段引數。

Transform(XmlReader, XmlWriter)

使用 XmlReader 物件所指定的輸入文件執行轉換,並將結果輸出至 XmlWriter

Transform(XmlReader, XsltArgumentList, Stream)

使用 XmlReader 物件所指定的輸入文件執行轉換,並將結果輸出至資料流。 XsltArgumentList 會提供額外的執行階段引數。

Transform(XmlReader, XsltArgumentList, TextWriter)

使用 XmlReader 物件所指定的輸入文件執行轉換,並將結果輸出至 TextWriterXsltArgumentList 會提供額外的執行階段引數。

Transform(XmlReader, XsltArgumentList, XmlWriter)

使用 XmlReader 物件所指定的輸入文件執行轉換,並將結果輸出至 XmlWriterXsltArgumentList 會提供額外的執行階段引數。

Transform(XmlReader, XsltArgumentList, XmlWriter, XmlResolver)

使用 XmlReader 物件所指定的輸入文件執行轉換,並將結果輸出至 XmlWriterXsltArgumentList 會提供額外的執行階段引數,且 XmlResolver 會解析 XSLT document() 函式。

適用於

執行緒安全性

物件 XslCompiledTransform 在載入後為安全線程。 換句話說,在方法成功完成之後 LoadTransform 可以從多個執行緒同時呼叫 方法。

Load如果在另一個執行緒中呼叫 方法時 Transform ,在某個執行緒中再次呼叫 方法,物件 XslCompiledTransform Transform 就會繼續使用舊狀態來執行呼叫。 方法成功完成時 Load ,會使用新的狀態。

從多個執行緒同時呼叫時,方法 Load 不是安全線程。

另請參閱