XslTransform 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
警告
This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202
使用 Extensible Stylesheet Language for Transformations(XSLT)樣式表來轉換 XML 資料。
public ref class XslTransform sealed
public sealed class XslTransform
[System.Obsolete("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202")]
public sealed class XslTransform
type XslTransform = class
[<System.Obsolete("This class has been deprecated. Please use System.Xml.Xsl.XslCompiledTransform instead. http://go.microsoft.com/fwlink/?linkid=14202")>]
type XslTransform = class
Public NotInheritable Class XslTransform
- 繼承
-
XslTransform
- 屬性
備註
備註
XslTransform 類別在 Microsoft .NET Framework 2.0 版本中已過時。 這個 XslCompiledTransform 類別是新的 XSLT 處理器。 如需詳細資訊,請參閱 使用 XslCompiledTransform 類別 和 從 XslTransform 類別移轉。
XslTransform 支援 XSLT 1.0 語法。 XSLT 樣式表必須使用命名空間 http://www.w3.org/1999/XSL/Transform。
也可以利用該 XsltArgumentList 類別在樣式表中新增額外的參數。 此類別包含樣式表的輸入參數,擴充物件可從樣式表中呼叫。
要轉換 XML 資料:
建立 XslTransform 物件。
用這個 Load 方法載入變換的樣式表。 此方法有多種重載,並可載入帶有 XmlReader檔案位置的樣式表,包含 、 XPathNavigator、 IXPathNavigable或 URL。
使用該 Transform 方法來轉換 XML 資料。 此方法有多種過載,能處理不同類型的輸入與輸出。 你也可以指定一個 XsltArgumentList 包含額外參數的參數,作為轉換時的輸入。
安全性考量
建立使用 XslTransform 類別的應用程式時,您應該注意下列事項及其影響:
擴充物件預設為啟用。 XsltArgumentList如果包含擴充對象的對象傳遞至 Transform 方法,則會使用它們。
XSLT 樣式表可以包含對其他檔案和內嵌腳本區塊的引用。 惡意使用者可能會利用這些漏洞,提供資料或樣式表,執行後會使系統持續運算直到電腦資源耗盡。
在混合信任環境中執行的 XSLT 應用程式可能會導致樣式表單詐騙。 例如,惡意使用者可以使用有害的樣式表單載入物件,並將它交給後續呼叫 Transform 方法並執行轉換的另一位使用者。
這些安全問題可以透過不接受 XslTransform 來自不受信任來源的物件、XSLT 樣式表或 XML 原始碼資料來緩解。
腳本支援
此類別支援使用 元素 msxsl:script 的嵌入式腳本。
在 .NET Framework 1.1 版本中,樣式表的證據決定了嵌入式腳本的權限。
若樣式表是從統一資源識別碼(URI)載入,則該 URI 用於建立證據。 這些證據包括URI及其遺址和區域。
如果樣式表是用其他來源載入,你可以透過傳遞 System.Security.Policy.Evidence 物件到 Load 方法來提供證據。 否則,腳本組裝完全信任。
半受信任呼叫者: UnmanagedCode 編譯內嵌腳本需取得許可。
ControlEvidence提供給Load方法需Evidence取得許可。 若呼叫者未取得必要權限,則會拋出 A SecurityException 。 如需詳細資訊,請參閱 System.Security.Permissions.SecurityPermission 和 System.Security.Permissions.SecurityPermissionFlag。
該 msxsl:script 元素具備以下要求:
該
msxsl:script元素屬於urn:schemas-microsoft-com:xslt命名空間。 樣式表必須包含命名空間宣告xmlns:msxsl=urn:schemas-microsoft-com:xslt。該
msxsl:script元素可以包含language一個屬性,指定要使用的腳本語言。 屬性的值language必須是以下其中之一:C#、CSharp、VB、VisualBasic、JScript 或 JavaScript。 由於語言名稱不區分大小寫,JavaScript 和 javascript 皆有效。 若language未指定屬性,則預設為 JScript。該
msxsl:script元素必須包含implements-prefix一個屬性,該屬性包含代表與腳本區塊相關聯命名空間的前綴。 此命名空間必須在樣式表中定義。 樣式表可以包含多個腳本區塊,並依命名空間分組。 你不能在同一命名空間內同時擁有多種語言的腳本區塊。 腳本區塊可以呼叫另一個腳本區塊中定義的函式,前提是這些腳本區塊位於相同的命名空間中。 腳本區塊的內容會依據腳本語言(由language屬性提供的)的規則與語法進行解析。 舉例來說,如果你有一個 C# 腳本區塊,註解會以字元作為前綴//。 註解必須是有效的 XML 內容。
備註
建議你在 CDATA 區段中包裝腳本區塊。
<msxsl:script implements-prefix='xy' language='C#'>
<![CDATA[
// Add code here.
]]>
</msxsl:script>
函式可以在 msxsl:script 元素內宣告。 下表顯示預設支援的命名空間。
| 支援命名空間 | Description |
|---|---|
System |
系統類別。 |
System.Collection |
收藏課程。 |
System.Text |
文字處理課程。 |
System.Xml |
核心 XML 類別。 |
System.Xml.Xsl |
XSLT 課程。 |
System.Xml.XPath |
XML 路徑語言(XPath)類別。 |
腳本函式所定義的參數與回傳值必須是以下列出的萬維網聯盟(W3C)類型之一。 下表詳細說明了 W3C 類型(XPath 或 XSLT)與對應的 .NET Framework 類別之間的映射。
| W3C 類型 | 等效的 .NET 類別 |
|---|---|
| 弦(XPath) | System.String |
| 布林值(XPath) | System.Boolean |
| 編號(XPath) | System.Double |
| 結果樹片段(XSLT) | System.Xml.XPath.XPathNavigator |
| 節點集(XPath) | System.Xml.XPath.XPathNodeIterator |
若腳本函式使用以下數字類型之一:Int16、UInt16、Int32、UInt32、Int64、UInt64、單數或十進位,這些類型會被強制轉換為 Double,對應至 W3C XPath 的類型編號。
當呼叫的函式無法將參數結果轉換為所需型別時,會拋出例外。
備註
msxsl:script和 msxsl:node-list 是該命名空間中唯一由類別支援XslTransform的函數urn:schemas-microsoft-com:xslt。
XslTransform 具備利用通用語言執行時(CLR)程式碼作為擴充機制的能力。 這是透過將一個類別的實例傳給該 XslTransform 類別,並在 XSLT 樣式表中呼叫其公開方法來達成的。 以 params 關鍵字定義、允許傳遞未指定參數數量的方法在此情況下無法正常運作。 詳情請參見 參數 。
更多資訊請參閱 XSLT 轉換與 XslTransform 類別的相關說明。
建構函式
| 名稱 | Description |
|---|---|
| XslTransform() |
已淘汰.
初始化 XslTransform 類別的新執行個體。 |
屬性
| 名稱 | Description |
|---|---|
| XmlResolver |
已淘汰.
設定 使用 以 XmlResolver 在呼叫該方法時 Transform 解析外部資源。 |
方法
適用於
執行緒安全性
XslTransform 物件僅在轉換操作時是執行緒安全的。 其他操作則不保證執行緒安全。 你必須確保在載入操作期間不會對物件呼叫其他方法。