XslTransform クラスを使用した XSLT 変換
XSLT (Extensible Stylesheet Language Transformation) の目的は、ソース XML ドキュメントの内容を形式や構造が異なる別のドキュメントに変換することです。たとえば、XML を、Web サイトで使用するために HTML に変換したり、アプリケーションが必要とするフィールドだけを含むドキュメントに変換したりします。この変換処理の仕様は、www.w3.org/TR/xslt にある W3C 勧告『XSL Transformations (XSLT) Version 1.0』で規定されています。.NET Framework では、System.Xml.Xsl 名前空間にある XslTransform クラスが、この仕様の機能を実装する XSLT プロセッサです。このクラスは、W3C『XSLT Version 1.0』から実装された機能以外に、「XslTransform からの出力」に示すいくつかの機能も備えています。.NET Framework の変換アーキテクチャを次の図に示します。
変換アーキテクチャ
XSLT 勧告では、XML ドキュメントの一部を選択するために XPath を採用しています。XPath とは、ドキュメント ツリーのノード間を移動するために使用されるクエリ言語です。図に示すように、.NET Framework における XPath の実装は、XmlDocument、XmlDataDocument、XPathDocument などのクラスに保存されている XML の一部を選択するために使用されます。XPathDocument は、最適化された XSLT データ ストアであり、これを XslTransform と共に使用すると、パフォーマンスの高い XSLT 変換を実現できます。
XslTransform と XPath を使用するときに一般的に使用されるクラスとその機能を次の表に示します。
クラスまたはインターフェイス | 機能 |
---|---|
XPathNavigator | ストア内で移動するためのカーソル スタイルのモデルを提供し、XPath クエリをサポートする API です。元になるストアを編集する機能は提供しません。編集するには、XmlDocument クラスを使用します。 |
IXPathNavigable | ストア用の XPathNavigator に CreateNavigator メソッドを提供するインターフェイスです。 |
XmlDocument | 対象のドキュメントの編集を有効にします。このクラスは IXPathNavigable を実装しているため、該当ドキュメントを編集した後で XSLT 変換を実行するシナリオにも対応できます。詳細については、「XslTransform への XmlDocument の入力」を参照してください。 |
XmlDataDocument | XmlDocument の派生クラスです。DataSet を使用してリレーショナル環境と XML 環境の橋渡しをし、その DataSet に対して指定された割り当てに従って、XML ドキュメント内での構造化データ ストレージを最適化します。このクラスは IXPathNavigable を実装しているため、データベースから取得したリレーショナル データに対して XSLT 変換を実行するシナリオに対応できます。詳細については、「XML とリレーショナル データおよび ADO.NET との統合」を参照してください。 |
XPathDocument | XslTransform 処理および XPath クエリ用に最適化されたクラスで、パフォーマンスの高い読み取り専用キャッシュを提供します。このクラスは IXPathNavigable を実装しており、XSLT 変換で優先的に使用されるストアです。 |
XPathNodeIterator | XPath ノード セット内を移動できるようにします。XPathNavigator の XPath 選択メソッドはすべて、XPathNodeIterator を返します。同じストアに対して、それぞれが選択されたノード セットを表す複数の XPathNodeIterators を作成できます。 |
XSL スタイル シートを読み込み、mydata.xml というファイルを XPathDocument に読み込み、myStyleSheet.xsl という名前の仮のファイルにあるデータに対して変換を実行した後で、書式設定された出力をコンソールに送信するコード例を次に示します。
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Imports System.Xml.Xsl
Public Class Sample
Private filename As [String] = "mydata.xml"
Private stylesheet As [String] = "myStyleSheet.xsl"
Public Shared Sub Main()
Dim xslt As New XslTransform()
xslt.Load(stylesheet)
Dim xpathdocument As New XPathDocument(filename)
Dim writer As New XmlTextWriter(Console.Out)
writer.Formatting = Formatting.Indented
xslt.Transform(xpathdocument, Nothing, writer, Nothing)
End Sub 'Main
End Class 'Sample
[C#]
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
public class Sample
{
private const String filename = "mydata.xml";
private const String stylesheet = "myStyleSheet.xsl";
public static void Main()
{
XslTransform xslt = new XslTransform();
xslt.Load(stylesheet);
XPathDocument xpathdocument = new
XPathDocument(filename);
XmlTextWriter writer = new XmlTextWriter(Console.Out);
writer.Formatting=Formatting.Indented;
xslt.Transform(xpathdocument, null, writer, null);
}
}
参照
XslTransform クラスによる XSLT プロセッサの実装 | XslTransform クラスの随意動作の実装 | 変換における XPathNavigator | 変換における XPathNodeIterator | XslTransform への XPathDocument の入力 | XslTransform への XmlDataDocument の入力 | XslTransform への XmlDocument の入力 | XslTransform クラス | XslTransform のメンバ