在.NET 應用程式中執行 XSLT 轉換的資訊: 藍圖

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

在此頁中

結論

本文提供藍圖介紹.NET Framework 的命名空間和類別,可以讓您以程式設計的方式執行.NET 應用程式中的 [可延伸樣式表語言轉換 (XSLT) 轉換。藍圖文件提供包括線上文件]、 [微軟知識庫文件] 及 [Microsoft 份白皮書,幫助您了解 Microsoft 產品或技術的有用資訊的連結。

本文不 XSLT 教學課程。本文假設您已熟悉 World Wide Web Consortium (W3C) XSLT standard,且有撰寫 XSLT 樣式表來轉換 XML 資料的經驗。

概觀

XSLT 是全球資訊網協會 (W3C) 標準轉換 XML 資料。XSLT 通常用來寫入來轉換 XML 資料至其他例如固定長度的文字、 逗點分隔的文字或不同的 XML 格式的 HTML 格式的樣式表。

開發人員觀點 XSLT 會是程式設計語言與豐富、 以 XML 為基礎的語法,實作程式設計建構和解決常見的轉換需求的項目與對應的項目。

XSLT 樣式表經常使用 XML 路徑語言 (XPath) 查詢,在來源 XML 文件中找不到節點,並套用 XSLT 範本來轉換這些節點。XSLT 樣式表中的 [XPath] 查詢的效率經常會影響,而且會影響效能的使用它的轉換。

從高階攤點 XSLT 處理器是一種軟體元件,將指定的樣式表套用至指定的來源 XML 文件執行 XSLT 轉換,以及產生所需的輸出。

XSLT 轉換產生最終的輸出通常是以指定的目標格式呈現原始的 XML 資料的結果文件。

在.NET 應用程式,以執行 XSLT 轉換中撰寫程式碼

下列的快速入門教學課程和 Microsoft 知識庫 」 文章將示範如何在.NET 應用程式將 XSLT 樣式表套用至 XML 文件中,執行基本的轉換中撰寫程式碼:
如何 I...將 XSL 轉換套用至 XML ??
http://samples.gotdotnet.com/quickstart/howto/doc/Xml/TransformXml.aspx
307322如何: 將 XSL 轉換套用至 XML 文件使用 Visual C#.NET
300929如何: 使用 Visual Basic.NET 套用從 XML 文件的 XSL 轉換到 XML 文件

System.Xml.Xsl 命名空間

System.Xml.Xsl 命名空間中的 XslTransform 類別會實作.NET Framework XSLT 處理器。這個類別的物件執行個體建立和用來在.NET 應用程式中執行 XSLT 轉換。XSLT 處理器在.NET Framework 的實作是相容版本 1.0 的 W3C XSLT Recommendation

System.Xml.Xsl 命名空間也會實作下列類別來支援 XSLT 例外處理和與 XSLT 轉換和 XPath 查詢的執行相關的進階的選項:
  • XsltArgumentList。您可以使用這個類別的物件執行個體提供延伸的物件執行個體和 XSLT 樣式表定義的 XSLT 參數和參考的值。
  • XsltCompileException。當錯誤發生時正在編譯 XSLT 樣式表時,這個類別會產生.NET Framework 例外狀況。Load 方法 XslTransform 物件的執行時,就會編譯 XSLT 樣式表。
  • XsltException。您執行 XSLT 轉換時,發生執行階段錯誤時,這個類別會產生.NET Framework 例外狀況。
  • XsltContextIXsltContextFunctionIXsltContextVariable。這些進階元件用來沒有實作,並參考使用者定義函式和變數在由使用 XPathNavigator 類別和文件物件模型 (DOM) 的類別執行.NET 應用程式中的 XPath 查詢中的需求時實作自訂的 XPath 查詢執行內容。

    若要更輕鬆地實作使用者定義函式和變數 XSLT 樣式表中所包含的 XPath 查詢運算式中,您可以使用內嵌指令碼區塊、 擴充物件和 XSLT 變數或參數。

XSLT 的進階的功能

這一節將說明數種進階的 XSLT 功能。

流水線操作的 XSLT 轉換

管線是指藉由以累加方式套用兩個或多個 XSLT 樣式表轉換來源 XML 文件的處理程序。每個中繼階段會產生的輸出提供做為下一個階段輸入一直至最後一個階段哪些再產生適當的輸出。

您必須保存為不直接連結到轉換程序的額外處理產生的中繼階段的輸出時,這個方法會相當實用。 如有關這個主題的詳細資訊,以及說明其使用方式的程式碼範例,按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
320847如何: 管線.NET 應用程式中的 XSLT 轉換

參數化的 XSLT 轉換

是常見的 XSLT 作法定義,並使用樣式表中的參數。參數化的 XSLT 樣式表使用 <xsl:param> 項目來定義選擇性地找出並轉換 XML 資料來源中的節點的 XPath 查詢運算式中所參考的參數。已定義參數的值可以硬式編碼在樣式表,或在執行階段提供。以動態方式提供控制轉換程序的輸入的參數值後者的作法是這項功能的最常見的使用方式。

在.NET 應用程式中 XsltArgumentList 物件用來提供在執行階段的 XSLT 參數的值。AddParam 方法用來新增表示樣式表和其值至 XsltArgumentList 物件中所定義的參數的名稱 / 值組。XsltArgumentList 物件再提供做為參數時執行 XslTransform 物件用來執行轉換的 轉換 方法。

GetParamRemoveParam 方法用來存取,並移除會加入至 XsltArgumentList 物件的個別參數。 如需有關如何在.NET 應用程式中執行參數化的 XSLT 轉換的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
321704如何: 在.NET 應用程式中執行參數化的 XSL 轉換

內嵌指令碼區塊

內嵌指令碼函數是其中一個選項,您可以用以實作使用者自訂函數和子 XSLT 樣式表中所使用的 XPath 查詢運算式中參考的程序。能夠在 XSLT 樣式表中包含內嵌指令碼區塊是 W3C 延伸。

在.NET] Framework 自訂的內嵌函式和副程式會編碼 <msxsl:script> XSLT 樣式表中的區塊中。您可以使用 Microsoft Visual Studio.NET 程式設計的語言,如 Microsoft Visual Basic.NET 或 Microsoft Visual C#.NET 來實作這些常式。

使用內嵌指令碼區塊相關聯的缺點之一就是它們讓 XSLT 樣式表不可移植。技術、 在標記和用來實作內嵌指令碼區塊的語意是 W3C XSLT 規格不進行標準化的廠商專屬的延伸。

您只能使用 XSLT 樣式表來定義並轉換使用 XSLT 處理器來執行可解譯相關的語意和整合與技術,已執行的程式碼中成功使用內嵌指令碼區塊。

在.NET] Framework Managed 組件會產生和載入隱含地執行所包含的程式碼中內嵌 <msxsl:script> 編寫指令碼區塊。在.NET Framework 會使這些組件無法轉換程序完成時正確卸載目前沒有已知的問題。如果受影響的樣式表重複地載入到執行 XSLT 轉換這個異常狀況會導致記憶體使用量的增加。只有回收主機處理程序時,才會被釋放 unreleased 的記憶體。 如需有關這個問題在.NET Framework 中的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
316775PRB: 無法卸載您建立並使用指令碼在 XSLT 中載入的組件
如果要暫時略過這個問題在 Microsoft ASP.NET 應用程式中,您就可以載入受影響的樣式表只能有一個時間期間生命週期的應用程式、 快取 (以 ASP.NET 快取),在受影響的樣式表,然後之後,重新使用快取的版本進行轉換。

在 Windows Form 和主控台應用程式,您可以使用全域 XslTransform 物件執行個體,應用程式啟動時載入受影響的樣式表,然後執行更新版本的轉換。當 XSLT 轉換有無狀態 (比方說具有中間層企業服務元件) 的環境中執行,並不會套用這些因應措施。

Microsoft 建議您使用 XSLT 擴充物件來實作自訂 XPath 擴充程式函式,如果要解決這個問題。

XSLT 擴充物件

Microsoft 建議您在 XSLT 樣式表中所使用的 XPath 查詢運算式中實作自訂的副程式和所參考的函式使用延伸模組物件。

您可以建立.NET Framework DLL 實作,以及使用延伸模組物件,當您在.NET 應用程式中執行的轉換。自訂的副程式和函式實作的一個 DLL,以及 DLL 元件的物件執行個體,會使用 XsltArgumentList 物件,當您執行之 XslTransform 物件的 [轉換] 方法來提供做為執行階段參數。

XsltArgumentList 類別 AddExtensionObject 方法用來新增至 XsltArgumentList 物件的擴充功能物件執行個體。您可以使用的 Get] 和 [移除] 方法延伸模組物件的存取,並移除擴充物件執行個體加入至 XsltArgumentList 物件。

W3C XSLT 規格位址概念,以及擴充項目使用,以及函式沒有任何留意,或參考基底的技術,您必須用來實作它們。您必須定義,並使用樣式表中的標準為基礎的 XML 命名空間前置詞參考函式和延伸模組物件中實作的副程式。廠商可以選取一種技術,最適合用來處理延伸模組物件實作方面其平台。 如概念和.NET Framework 中的 XSLT 擴充物件使用的相關額外資訊,以及建立端對端應用程式,示範如何使用延伸模組物件,當您在.NET 應用程式中執行 XSLT 轉換步驟,按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
321702如何: 使用的延伸模組物件,當您在 Visual Basic.NET 應用程式中執行 XSL 轉換

若要執行 XSLT 轉換使用.NET Framework 類別的一般方針

  • XPathDocument 類別高度是針對 XSLT 和 XPath 處理最佳化。為了達到最佳效能永遠使用 XPathDocument 物件以提供來源 XML,您執行 XSLT 轉換時。
  • 您可以快取,然後重複使用 XslTransform 物件用來載入經常用來執行更新版本的轉換的 XSLT 樣式表。
  • XSLT 處理器並不會快自動取 XSLT 轉換中所使用的延伸模組物件執行個體。您可以快取,然後重複使用 XsltArgumentList 物件用來提供常用的 XSLT 樣式表的延伸模組物件執行個體,當您執行更新版本的轉換。這是.NET Framework 中的 XSLT 轉換中所使用的快取擴充物件的方法。
  • 實作內嵌指令碼區塊的 XSLT 樣式表應該只會載入一次且快取。您應該重複使用快取的 XslTransform 物件為較新的轉換。您可以使用這種作法來克服必須在樣式表中使用內嵌指令碼函式時,Microsoft 知識庫 」 文章 Q316775 中說明的記憶體管理問題。
  • Microsoft 建議您在 XSLT 樣式表中所使用的 XPath 查詢運算式中實作所參考的自訂函式使用延伸模組物件。只有當您感到色彩太實作,且參考由使用 XPathNavigator 和 DOM 類別執行.NET 應用程式中的 XPath 查詢運算式中的自訂擴充程式函式,請實作自訂 XsltContextIXsltContextFunctionIXsltContextVariable 類別。
  • 實作的例外處理程式碼來處理 XsltCompileExceptionXsltExceptionXmlException.NET Framework 例外狀況類別,當您撰寫程式碼執行 XSLT 轉換。這些例外狀況類別提供當您嘗試執行 XSLT 轉換時,就會發生任何 XSLT 特定或 XML 特定問題的相關資訊。此外,Microsoft 建議您實作程式碼來處理其他特定的.NET Framework 例外狀況和您實作以基礎實作執行 XSLT 轉換的程式碼區塊中的其他、 非 XSLT 相關功能之泛型 System.Exception 類別。

在.NET Framework 中的 XSLT 轉換的效能

如需有關原因與已知的效能問題,當您在.NET 應用程式中執行 XSLT 轉換的解決方案的詳細資訊按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
325689資訊: 效能的.NET Framework 中的 XSLT 轉換

疑難排解

如果您遇到問題,或有問題,您可以參考 MSDN 新聞群組,您可以與您的同事共用您的經驗。您也可以使用 「 Microsoft 知識庫您可以在其中搜尋有關特定問題的文件或洽詢 Microsoft 產品支援服務 」。
MSDN 新聞群組
http://msdn.microsoft.com/newsgroups/

搜尋 「 知識庫
http://support.microsoft.com/search

Microsoft 產品支援服務
http://support.microsoft.com

?考

如需 %1 的詳細資訊,按一下面的文件編號 %2 下面,檢視 「 Microsoft 知識庫 」 中的文件 %2 件:
313651XML 在.NET Framework 中的資訊: 藍圖

屬性

文章編號: 313997 - 上次校閱: 2005年8月12日 - 版次: 4.4
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
關鍵字:?
kbmt kbarttyperoadmap kbinfo KB313997 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:313997
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