XslTransform クラスからの移行Migrating From the XslTransform Class

XSLT アーキテクチャは、Visual Studio 2005 リリースで設計が変更されました。The XSLT architecture was redesigned in the Visual Studio 2005 release. XslTransform クラスは XslCompiledTransform クラスで置き換えられました。The XslTransform class was replaced by the XslCompiledTransform class.

以降では、XslCompiledTransform クラスと XslTransform クラスの主な相違点について説明します。The following sections describe some of the main differences between the XslCompiledTransform and the XslTransform classes.

パフォーマンスPerformance

XslCompiledTransform クラスでは多くのパフォーマンスの向上が図られています。The XslCompiledTransform class includes many performance improvements. 新しい XSLT プロセッサは XSLT スタイル シートを、共通言語ランタイム (CLR) が他のプログラム言語で行うのと同様に、共通の中間形式にコンパイルします。The new XSLT processor compiles the XSLT style sheet down to a common intermediate format, similar to what the common language runtime (CLR) does for other programming languages. いったんスタイル シートがコンパイルされると、それをキャッシュして再利用することができます。Once the style sheet is compiled, it can be cached and reused.

XslCompiledTransform クラスには、このクラスを XslTransform クラスよりも大幅に高速化する他の最適化も含まれています。The XslCompiledTransform class also includes other optimizations that make it much faster than the XslTransform class.

注意

全体的なパフォーマンスは XslCompiledTransform クラスの方が XslTransform クラスより優れていますが、Load クラスの XslCompiledTransform メソッドが変換で初めて呼び出されたときは、Load クラスの XslTransform メソッドよりパフォーマンスが劣る場合があります。Although the overall performance of the XslCompiledTransform class is better than the XslTransform class, the Load method of the XslCompiledTransform class might perform more slowly than the Load method of the XslTransform class the first time it is called on a transformation. これは、XSLT ファイルを読み込む前にコンパイルする必要があるためです。This is because the XSLT file must be compiled before it is loaded. 詳細については、ブログ記事「XslCompiledTransform Slower than XslTransform?」(XslCompiledTransform は XslTransform より遅いか?) というブログ記事をお読みください。For more information, see the following blog post: XslCompiledTransform Slower than XslTransform?

セキュリティSecurity

既定で、XslCompiledTransform クラスでは XSLT document() 関数と埋め込みスクリプトのサポートが無効になっています。By default, the XslCompiledTransform class disables support for the XSLT document() function and embedded scripting. これらの機能を有効にするには、機能が有効になっている XsltSettings オブジェクトを作成し、それを Load メソッドに渡します。These features can be enabled by creating an XsltSettings object that has the features enabled and passing it to the Load method. スクリプト作成を有効にして XSLT 変換を実行する方法を次の例に示します。The following example shows how to enable scripting and perform an XSLT transformation.

// Create the XsltSettings object with script enabled.
XsltSettings settings = new XsltSettings(false,true);

// Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("calc.xsl", settings, new XmlUrlResolver());
xslt.Transform("books.xml", "books.html");
' Create the XsltSettings object with script enabled.
Dim settings As New XsltSettings(False, True)
        
' Execute the transform.
Dim xslt As New XslCompiledTransform()
xslt.Load("calc.xsl", settings, New XmlUrlResolver())
xslt.Transform("books.xml", "books.html")

詳しくは、「XSLT のセキュリティに関する考慮事項」をご覧ください。For more information, see XSLT Security Considerations.

新機能New Features

一時テーブルTemporary Files

XSLT の処理中に一時ファイルが生成されることがあります。Temporary files are sometimes generated during XSLT processing. スタイル シートにスクリプト ブロックが含まれる場合、またはデバッグ設定を true に設定してスタイル シートをコンパイルした場合、%TEMP% フォルダーに一時ファイルが作成されます。If a style sheet contains script blocks, or if it is compiled with the debug setting set to true, temporary files may be created in the %TEMP% folder. タイミングの問題で、一部の一時ファイルが削除されない場合があります。There may be instances when some temporary files are not deleted due to timing issues. たとえば、一時ファイルが現在の AppDomain やデバッガーにより使用されると、TempFileCollection オブジェクトの終了処理でそのファイルを削除できなくなります。For example, if the files are in use by the current AppDomain or by the debugger, the finalizer of the TempFileCollection object will not be able to remove them.

クライアントのすべての一時ファイルが削除されるように、TemporaryFiles プロパティを使用して追加のクリーンアップを実行することができます。The TemporaryFiles property can be used for additional cleanup to make sure that all temporary files are removed from the client.

xsl:output 要素と XmlWriter のサポートSupport for the xsl:output Element and XmlWriter

変換出力が XslTransform オブジェクトに送られる場合、xsl:output クラスでは XmlWriter の設定が無視されていました。The XslTransform class ignored xsl:output settings when the transform output was sent to an XmlWriter object. XslCompiledTransform クラスには、スタイル シートの OutputSettings 要素から取得された出力情報を含む XmlWriterSettings オブジェクトを返す xsl:output プロパティがあります。The XslCompiledTransform class has an OutputSettings property that returns an XmlWriterSettings object containing the output information derived from the xsl:output element of the style sheet. XmlWriterSettings オブジェクトを使用して、適切に設定された XmlWriter オブジェクトを作成し、それを Transform メソッドに渡すことができます。The XmlWriterSettings object is used to create an XmlWriter object with the correct settings that can be passed to the Transform method. 次の C# コードに、この処理を示します。The following C# code illustrates this behavior:

// Create the XslTransform object and load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(stylesheet);

// Load the file to transform.
XPathDocument doc = new XPathDocument(filename);

// Create the writer.
XmlWriter writer = XmlWriter.Create(Console.Out, xslt.OutputSettings);

// Transform the file and send the output to the console.
xslt.Transform(doc, writer);
writer.Close();

デバッグ オプションDebug Option

XslCompiledTransform クラスによりデバッグ情報を生成できます。この機能を利用して、Microsoft Visual Studio デバッガーを使用してスタイル シートをデバッグすることができます。The XslCompiledTransform class can generate debug information, which enables you to debug the style sheet with the Microsoft Visual Studio Debugger. 詳細については、「XslCompiledTransform(Boolean)」を参照してください。See XslCompiledTransform(Boolean) for more information.

動作の違いBehavioral Differences

XmlReader への変換Transforming to an XmlReader

XslTransform クラスには、変換結果を XmlReader オブジェクトとして返す Transform オーバーロードが数種類あります。The XslTransform class has several Transform overloads that return transformation results as an XmlReader object. このオーバーロードを使用することで、生成される XML ツリーのシリアル化と逆シリアル化によるオーバーヘッドを生じることなく、変換結果をメモり内表現 (XmlDocument または XPathDocument) に読み込むことができます。These overloads can be used to load the transformation results into an in-memory representation (such as XmlDocument or XPathDocument) without incurring the overhead of serialization and deserialization of the resulting XML tree. 次の C# コード例で、XmlDocument オブジェクトに変換結果を読み込む方法を示します。The following C# code shows how to load the transformation results into an XmlDocument object.

// Load the style sheet
XslTransform xslt = new XslTransform();
xslt.Load("MyStylesheet.xsl");

// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
doc.Load(xslt.Transform(input, (XsltArgumentList)null));

XslCompiledTransform クラスでは、XmlReader オブジェクトへの変換がサポートされません。The XslCompiledTransform class does not support transforming to an XmlReader object. ただし、CreateNavigator メソッドを使用して、生成される XML ツリーを XmlWriter から直接読み込むことはできます。However, you can do something similar by using the CreateNavigator method to load the resulting XML tree directly from an XmlWriter. 次の C# コード例では、同じタスクを XslCompiledTransform を使用して行う方法を示します。The following C# code shows how to accomplish the same task using XslCompiledTransform.

// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
using (XmlWriter writer = doc.CreateNavigator().AppendChild()) {
    xslt.Transform(input, (XsltArgumentList)null, writer);
}

随意動作Discretionary Behavior

W3C 勧告『XSL Transformations (XSLT) Version 1.0』には、対処方法を実装者が決定できる事項があります。The W3C XSL Transformations (XSLT) Version 1.0 Recommendation includes areas in which the implementation provider may decide how to handle a situation. このような事項は、随意動作と見なされています。These areas are considered to be discretionary behavior. 事項によっては、XslCompiledTransform クラスと XslTransform クラスで動作が異なります。There are several areas where the XslCompiledTransform behaves differently than the XslTransform class. 詳しくは、「XSLT エラーの解決」をご覧ください。For more information, see Recoverable XSLT Errors.

拡張オブジェクトとスクリプト関数Extension Objects and Script Functions

XslCompiledTransform では、スクリプト関数の使用に関して新たに 2 つの制限が加えられています。XslCompiledTransform introduces two new restrictions on the use of script functions:

  • XPath 式からはパブリック メソッドのみを呼び出すことができる。Only public methods may be called from XPath expressions.

  • オーバーロードは引数の数に基づいて区別される。Overloads are distinguishable from each other based on the number of arguments. 引数の数が同じオーバーロードが複数存在する場合、例外が発生します。If more than one overload has the same number of arguments, an exception will be raised.

XslCompiledTransform では、スクリプト関数へのバインド (メソッド名参照) がコンパイル時に実行されます。XslTransform を利用するスタイル シートを XslCompiledTransform によって読み込むと、例外が発生する場合があります。In XslCompiledTransform, a binding (method name lookup) to script functions occurs at compile time, and style sheets that worked with XslTransform may cause an exception when they are loaded with XslCompiledTransform.

XslCompiledTransform では、msxsl:using 要素内に子要素として msxsl:assembly および msxsl:script を含めることがサポートされます。XslCompiledTransform supports having msxsl:using and msxsl:assembly child elements within the msxsl:script element. msxsl:using 要素と msxsl:assembly 要素を使用して、スクリプト ブロックで使用する追加の名前空間とアセンブリを宣言できます。The msxsl:using and msxsl:assembly elements are used to declare additional namespaces and assemblies for use in the script block. 詳しくは、「msxsl:script を使用したスクリプト ブロック」をご覧ください。See Script Blocks Using msxsl:script for more information.

XslCompiledTransform では、複数のオーバーロードおよびそれと同数の引数を含む拡張オブジェクトは使用できません。XslCompiledTransform prohibits extension objects that have multiple overloads with the same number of arguments.

MSXML 関数MSXML Functions

XslCompiledTransform クラスでは、新しい MSXML 関数のサポートが追加されました。Support for additional MSXML functions have been added to the XslCompiledTransform class. 新しい関数または強化された関数は次のとおりです。The following list describes new or improved functionality:

関連項目See also