XslTransform クラスによる XSLT プロセッサの実装XslTransform Class Implements the XSLT Processor

注意

.NET Framework 2.0 では XslTransform クラスが廃止されています。The XslTransform class is obsolete in the .NET Framework 2.0. XslCompiledTransform クラスを使用して XSLT (Extensible Stylesheet Language for Transformations) 変換を実行できます。You can perform Extensible Stylesheet Language for Transformations (XSLT) transformations using the XslCompiledTransform class. 詳しくは、「XslCompiledTransform クラスの使用」および「XslTransform クラスからの移行」をご覧ください。See Using the XslCompiledTransform Class and Migrating From the XslTransform Class for more information.

XslTransform クラスは、『XSL Transformations (XSLT) Version 1.0』勧告を実装する XSLT プロセッサです。The XslTransform class is an XSLT processor implementing the XSL Transformations (XSLT) Version 1.0 recommendation. Load メソッドはスタイル シートを検索して読み込み、Transform メソッドは渡されたソース ドキュメントを変換します。The Load method locates and reads style sheets, and the Transform method transforms the given source document. IXPathNavigable インターフェイスを実装している任意のストアを XslTransform のソース ドキュメントとして使用できます。Any store that implements the IXPathNavigable interface can be used as the source document for the XslTransform. .NET Framework では、現在、IXPathNavigable インターフェイスを XmlDocumentXmlDataDocument、および XPathDocument に実装しているので、これらすべてを変換用の入力ソース ドキュメントとして使用できます。The .NET Framework currently implements the IXPathNavigable interface on the XmlDocument, the XmlDataDocument, and the XPathDocument, so all of these can be used as the input source document to a transformation.

.NET Framework の XslTransform オブジェクトは、次の名前空間で定義されている XSLT 1.0 仕様のみをサポートしています。The XslTransform object in the .NET Framework only supports the XSLT 1.0 specification, defined with the following namespace:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

Load メソッドを使用して、次のいずれかのクラスからスタイル シートを読み込むことができます。The style sheet can be loaded, using the Load method, from one of the following classes:

  • XPathNavigatorXPathNavigator

  • XmlReaderXmlReader

  • URL を表す文字列A string representing a URL

これらの入力クラスには、それぞれに対応する別々の Load メソッドがあります。There is a different Load method for each of the above input classes. これらのクラスの 1 つと XmlResolver クラスの組み合わせを引数として受け取るメソッドもあります。Some methods take in a combination of one of these classes and the XmlResolver class as arguments. XmlResolver は、スタイル シート内の <xsl:import> または <xsl:include> によって参照されているリソースを検索します。The XmlResolver locates resources referenced by <xsl:import> or <xsl:include> found in the style sheet. 次に示すメソッドは、文字列、XmlReader、または XPathNavigator を入力として受け取ります。The following methods take a string, XmlReader, or XPathNavigator as input.

Overloads Public Sub Load(String)
public void Load(string);
Overloads Public Sub Load(String, XmlResolver)
public void Load(string, XmlResolver);
Overloads Public Sub Load(XmlReader, XmlResolver, Evidence)
public void Load(XmlReader, XmlResolver, Evidence);
Overloads Public Sub Load(XPathNavigator, XmlResolver, Evidence)
public void Load(XPathNavigator, XmlResolver, Evidence);

上に示した Load メソッドの大半は、XmlResolver をパラメーターとして受け取ります。Most of the Load methods shown above take an XmlResolver as a parameter. XmlResolver は、スタイル シートおよび xsl:import 要素と xsl:include 要素で参照されているスタイル シートの読み込みに使用します。The XmlResolver is used to load the style sheet and any style sheet(s) referenced in xsl:import and xsl:include elements.

大半の Load メソッドは証拠もパラメーターとして受け取ります。Most of the Load methods also take evidence as a parameter. 証拠パラメーターは、スタイル シートに関連付けられている Evidence です。The evidence parameter is the Evidence that is associated with the style sheet. スタイル シートのセキュリティ レベルに応じて、スタイル シートに含まれているスクリプト、スタイル シートで使用されている document() 関数、XsltArgumentList で使用されている拡張オブジェクトなど、そのスタイル シートが参照しているリソースのセキュリティ レベルも変わります。The security level of the style sheet affects the security level of any subsequent resources it references, such as the script it contains, any document() functions it uses, and any extension objects used by the XsltArgumentList.

URL パラメーターが含まれた Load メソッドを使用してスタイル シートを読み込んだ場合、証拠が指定されていなければ、指定された URL およびそのサイトとゾーンを組み合わせてスタイル シートの証拠が計算されます。If the style sheet is loaded using a Load method that contains a URL parameter and no evidence is provided, the evidence of the style sheet is calculated by combining the given URL with its site and zone.

URI も証拠も指定されていない場合は、スタイル シートに対して設定されている証拠が完全に信頼されます。If no URI or evidence is provided, then the evidence set for the style sheet is fully trusted. 信頼されていないソースからスタイル シートを読み込んだり、信頼されていない拡張オブジェクトを XsltArgumentList に追加したりしないでください。Do not load style sheets from untrusted sources, or add untrusted extension objects into the XsltArgumentList.

セキュリティ レベルと証拠、それがスクリプトに及ぼす影響の詳細については、「<msxsl:script> を使用した XSLT スタイルシートのスクリプト」を参照してください。For more information about security levels and evidence and how it affects scripting, see XSLT Stylesheet Scripting Using <msxsl:script>. セキュリティ レベルと証拠、それが拡張オブジェクトに与える影響の詳細については、「スタイル シート パラメーターと拡張オブジェクト用の XsltArgumentList」を参照してください。For information about security levels and evidence and how it affects extension objects, see XsltArgumentList for Style Sheet Parameters and Extension Objects.

セキュリティ レベルと証拠、それが document() 関数に及ぼす影響については、「外部の XSLT スタイル シートとドキュメントの解決」を参照してください。For information about security levels and evidence and how it affects the document() function, see Resolving External XSLT Style Sheets and Documents.

スタイル シートに対しては、多くの入力パラメーターを指定できます。A style sheet can be supplied with a number of input parameters. スタイル シートでは、拡張オブジェクトの関数を呼び出すこともできます。The style sheet can also call functions on extension objects. パラメーターおよび拡張オブジェクトのいずれも XsltArgumentList クラスを使用してスタイル シートに渡されます。Both parameters and extension objects are supplied to the style sheet using the XsltArgumentList class. XsltArgumentList の詳細については、「XsltArgumentList」を参照してください。For more information about the XsltArgumentList, see XsltArgumentList.

スタイル シートのセキュリティ特権は、指定されている証拠によって異なります。The security privileges of the style sheet depend on the evidence provided. 次の表では、スタイル シートの場所と、指定する証拠の種類を説明します。The following table summarizes the location of the style sheet and gives an explanation of what type of evidence to give.

  • XSLT スタイル シートに外部参照がない場合。またはスタイル シートが信頼できるコード ベースにある場合。The XSLT style sheet has no external references, or the style sheet comes from a code base that you trust.

    • アセンブリの証拠を指定します。Provide the evidence from your assembly:

      Dim xslt = New XslTransform() xslt.Load(stylesheet, resolver, Me.GetType().Assembly.Evidence)
      
      XsltTransform xslt = new XslTransform();  xslt.Load(stylesheet, resolver, this.GetType().Assembly.Evidence);
      
  • XSLT スタイル シートが外部ソースにある場合。The XSLT style sheet comes from an outside source. ソースの出所が知られており、検証可能な URI がある。The origin of the source is known and there is a verifiable URI.

    • URI を使用して証拠を作成します。Create evidence using the URI.

      Dim xslt As New XslTransform() Dim ev As Evidence = XmlSecureResolver.CreateEvidenceForUrl(stylesheetUri) xslt.Load(stylesheet, resolver, evidence)
      
      XslTransform xslt = new XslTransform(); Evidence ev = XmlSecureResolver.CreateEvidenceForUrl(stylesheetUri); xslt.Load(stylesheet, resolver, evidence);
      
  • XSLT スタイル シートが外部ソースにある場合。The XSLT style sheet comes from an outside source. ソースの出所は不明。The origin of the source is not known.

    • 証拠を null に設定します。Set evidence to null. スクリプト ブロックは処理されません。XSLT document() 関数はサポートされません。特権を持つ拡張オブジェクトは許可されません。Script blocks are not processed, the XSLT document() function is not supported, and privileged extension objects are disallowed.

      resolver パラメーターを null に設定することもできます。そうすれば、xsl:import 要素と xsl:include 要素は処理されません。Additionally, you can also set the resolver parameter to null This ensures that xsl:import and xsl:include elements are not processed.

  • XSLT スタイル シートが外部ソースにある場合。The XSLT style sheet comes from an outside source. ソースの出所が不明であるが、スクリプトのサポートが必要。The origin of the source is not known, but you require script support.

    • 呼び出し元の証拠を要求します。Request evidence from the caller.

XML データの変換Transformation of XML Data

スタイル シートが読み込まれた後で、いずれかの Transform メソッドを呼び出し、入力ソース ドキュメントを渡すと、変換が開始されます。Once a style sheet is loaded, the transformation starts by calling one of the Transform methods and supplying an input source document. Transform メソッドは、さまざまな変換出力を提供できるように、オーバーロードされます。The Transform method is overloaded to provide different transformation outputs. 変換の結果として得られる出力形式を次に示します。The transformation can result in the following output formats:

最後の文字列 URL 形式は、URL 上にある入力ドキュメントを変換し、そのドキュメントを出力 URL に書き込む場合によく使用されます。This last format, the string URL, provides for a commonly used scenario in transforming an input document located in a URL and writing the document to the output URL. この Transform メソッドは、ファイルから XML ドキュメントを読み込み、XSLT 変換を実行し、出力をファイルに書き込む場合に便利です。This Transform method is a convenience method to load an XML document from a file, perform the XSLT transformation, and write the output to a file. これにより、入力ソース ドキュメントを作成および読み込んでからファイル ストリームに書き込む必要がなくなります。This prevents you from having to create and load the input source document, and then write to a file stream. 文字列 URL を入出力として使う Transform メソッドを使用するコード サンプルを次に示します。The following code sample shows this use of the Transform method using the string URL as input and output:

Dim xsltransform As XslTransform = New XslTransform()
xsltransform.Load("favorite.xsl")
xsltransform.Transform("MyDocument.Xml", "TransformResult.xml", Nothing)
XslTransform xsltransform = new XslTransform();
xsltransform.Load("favorite.xsl");
xsltransform.Transform("MyDocument.xml", "TransformResult.xml", null);

XML ドキュメントのセクションの変換Transforming a Section of an XML Document

変換はドキュメント全体に対して行われます。Transformations apply to the document as a whole. つまり、ドキュメント ルート ノード以外のノードを指定しても、変換処理では、読み込んだドキュメントのすべてのノードがアクセスされます。In other words, if you pass in a node other than the document root node, this does not prevent the transformation process from accessing all nodes in the loaded document. 結果ツリー フラグメントを変換するには、結果ツリー フラグメントだけが含まれた XmlDocument を作成し、その XmlDocumentTransform メソッドに渡します。To transform a result tree fragment, you must create an XmlDocument containing just the result tree fragment and pass that XmlDocument to the Transform method. 結果ツリー フラグメントの変換を実行する例を次に示します。The following example performs a transformation on a result tree fragment.

Dim xslt As New XslTransform()
xslt.Load("print_root.xsl")
Dim doc As New XmlDocument()
doc.Load("library.xml")
' Create a new document containing just the result tree fragment.
Dim testNode As XmlNode = doc.DocumentElement.FirstChild
Dim tmpDoc As New XmlDocument()
tmpDoc.LoadXml(testNode.OuterXml)
' Pass the document containing the result tree fragment
' to the Transform method.
Console.WriteLine(("Passing " + tmpDoc.OuterXml + " to print_root.xsl"))
xslt.Transform(tmpDoc, Nothing, Console.Out, Nothing)
XslTransform xslt = new XslTransform();
xslt.Load("print_root.xsl");
XmlDocument doc = new XmlDocument();
doc.Load("library.xml");
// Create a new document containing just the result tree fragment.
XmlNode testNode = doc.DocumentElement.FirstChild;
XmlDocument tmpDoc = new XmlDocument();
tmpDoc.LoadXml(testNode.OuterXml);
// Pass the document containing the result tree fragment
// to the Transform method.
Console.WriteLine("Passing " + tmpDoc.OuterXml + " to print_root.xsl");
xslt.Transform(tmpDoc, null, Console.Out, null);

この例では、library.xml ファイルと print_root.xsl ファイルを入力として使用し、次の出力をコンソールに表示します。The example uses the library.xml and print_root.xsl files as input and outputs the following to the console:

Passing <book genre="novel" ISBN="1-861001-57-5"><title>Pride And Prejudice</title></book> to print_root.xsl
Root node is book.

library.xmllibrary.xml

<library>
  <book genre='novel' ISBN='1-861001-57-5'>
     <title>Pride And Prejudice</title>
  </book>
  <book genre='novel' ISBN='1-81920-21-2'>
     <title>Hook</title>
  </book>
</library>

print_root.xslprint_root.xsl

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform" >
  <output method="text" />
  <template match="/">
     Root node is  <value-of select="local-name(//*[position() = 1])" />
  </template>
</stylesheet>

.NET Framework Version 1.0 から .NET Framework Version 1.1 への XSLT の移行Migration of XSLT from .NET Framework version 1.0 to .NET Framework version 1.1

廃止された .NET Framework バージョン 1.0 と新しい .NET Framework バージョン 1.1 の Load メソッドを次の表に示します。The following table shows the obsolete .NET Framework version 1.0 methods and new .NET Framework version 1.1 methods for the Load method. 新しいメソッドでは、証拠を指定することで、スタイル シートのアクセス許可を制限できます。The new methods enable you to limit the permissions of the style sheet by specifying evidence.

廃止された .NET Framework バージョン 1.0 の Load メソッドObsolete .NET Framework version 1.0 Load Methods 新しい .NET Framework バージョン 1.1 の Load メソッドReplacement .NET Framework version 1.1 Load Methods
Load(XPathNavigator input);Load(XPathNavigator input);

Load(XPathNavigator input, XmlResolver resolver);Load(XPathNavigator input, XmlResolver resolver);
Load(XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence);Load(XPathNavigator stylesheet, XmlResolver resolver, Evidence evidence);
Load(IXPathNavigable stylesheet);Load(IXPathNavigable stylesheet);

Load(IXPathNavigable stylesheet, XmlResolver resolver);Load(IXPathNavigable stylesheet, XmlResolver resolver);
Load(IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence);Load(IXPathNavigable stylesheet, XmlResolver resolver, Evidence evidence);
Load(XmlReader stylesheet);Load(XmlReader stylesheet);

Load(XmlReader stylesheet, XmlResolver resolver);Load(XmlReader stylesheet, XmlResolver resolver);
Load(XmlReader stylesheet, XmlResolver resolver, Evidence evidence);Load(XmlReader stylesheet, XmlResolver resolver, Evidence evidence);

廃止された Transform メソッドと新しい メソッドを次の表に示します。The following table shows the obsolete and new methods for the Transform method. 新しいメソッドは XmlResolver オブジェクトを受け取ります。The new methods take an XmlResolver object.

廃止された .NET Framework バージョン 1.0 の Transform メソッドObsolete .NET Framework version 1.0 Transform Methods 新しい .NET Framework バージョン 1.1 の Transform メソッドReplacement .NET Framework version Transform 1.1 Methods
XmlReader Transform(XPathNavigator input, XsltArgumentList args)XmlReader Transform(XPathNavigator input, XsltArgumentList args) XmlReader Transform(XPathNavigator input, XsltArgumentList args, XmlResolver resolver)XmlReader Transform(XPathNavigator input, XsltArgumentList args, XmlResolver resolver)
XmlReader Transform(IXPathNavigable input, XsltArgumentList args)XmlReader Transform(IXPathNavigable input, XsltArgumentList args) XmlReader Transform(IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)XmlReader Transform(IXPathNavigable input, XsltArgumentList args, XmlResolver resolver)
Void Transform(XPathNavigator input, XsltArgumentList args, XmlWriter output)Void Transform(XPathNavigator input, XsltArgumentList args, XmlWriter output) Void Transform(XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)Void Transform(XPathNavigator input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
Void Transform(IXPathNavigable input, XsltArgumentList args, XmlWriter output)Void Transform(IXPathNavigable input, XsltArgumentList args, XmlWriter output) Void Transform(IXpathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)Void Transform(IXpathNavigable input, XsltArgumentList args, XmlWriter output, XmlResolver resolver)
Void Transform(XPathNavigator input, XsltArgumentList args, TextWriter output)Void Transform(XPathNavigator input, XsltArgumentList args, TextWriter output) Void Transform(XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)Void Transform(XPathNavigator input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
Void Transform(IXPathNavigable input, XsltArgumentList args, TextWriter output)Void Transform(IXPathNavigable input, XsltArgumentList args, TextWriter output) Void Transform(IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)Void Transform(IXPathNavigable input, XsltArgumentList args, TextWriter output, XmlResolver resolver)
Void Transform(XPathNavigator input, XsltArgumentList args, Stream output)Void Transform(XPathNavigator input, XsltArgumentList args, Stream output) Void Transform(XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)Void Transform(XPathNavigator input, XsltArgumentList args, Stream output, XmlResolver resolver)
Void Transform(IXPathNavigable input, XsltArgumentList args, Stream output)Void Transform(IXPathNavigable input, XsltArgumentList args, Stream output) Void Transform(IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)Void Transform(IXPathNavigable input, XsltArgumentList args, Stream output, XmlResolver resolver)
Void Transform(String input, String output);Void Transform(String input, String output); Void Transform(String input, String output, XmlResolver resolver);Void Transform(String input, String output, XmlResolver resolver);

.NET Framework バージョン 1.1 では、XslTransform.XmlResolver プロパティが廃止されています。The XslTransform.XmlResolver property is obsolete in .NET Framework version 1.1. 代わりに、XmlResolver オブジェクトを受け取る新しい Transform オーバーロードを使用します。Instead, use the new Transform overloads which take an XmlResolver object.

関連項目See also