XslTransform クラスを使用した XSLT 変換

メモメモ

.NET Framework Version 2.0 では、XslTransform クラスが廃止されています。XslCompiledTransform クラスを使用して XSLT (Extensible Stylesheet Language for Transformations) 変換を実行できます。詳細については、「XslCompiledTransform クラスの使用」および「XslTransform クラスからの移行」を参照してください。

XSLT の目的は、たとえば、XML を Web サイトで使われる HTML に変換したり、XML ドキュメントをアプリケーションが必要とするフィールドのみが含まれたドキュメントに変換するなど、ソース XML ドキュメントの内容を形式や構造の異なる別のドキュメントに変換することです。 この変換処理の仕様は、www.w3.org/TR/xslt にある W3C (World Wide Web Consortium) 勧告『XSLT Version 1.0』で規定されています。 .NET Framework では、System.Xml.Xsl 名前空間にある XslTransform クラスが、この仕様の機能を実装する XSLT プロセッサです。 W3C 勧告『XSLT Version 1.0』から実装された機能の他に、「XslTransform からの出力」に記載されている機能がいくつかあります。 .NET Framework の変換アーキテクチャを次の図に示します。

概要

変換アーキテクチャ

XSLT 変換アーキテクチャ

XSLT 勧告では、XPath (XML Path Language) を使って XML ドキュメントの一部を選択します。XPath とは、ドキュメント ツリーのノード間を移動するのに使われるクエリ言語です。 図に示すように、XPath の .NET Framework の実装は、XmlDocumentXmlDataDocumentXPathDocument など、複数のクラスに格納されている 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 を返します。 同じストアに対して、選択されているノード セットを表す複数の XPathNodeIterator オブジェクトを作成できます。

MSXML XSLT 拡張機能

XslTransform クラスがサポートしている Microsoft XML コア サービス (MSXML) XSLT 拡張機能は、msxsl:script 関数と msxsl:node-set 関数のみです。

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
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

概念

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

XslTransform クラスの随意動作の実装

変換における XPathNavigator

変換における XPathNodeIterator

XslTransform への XPathDocument の入力

XslTransform への XmlDataDocument の入力

XslTransform への XmlDocument の入力