XPathNavigator クラスは、データへの読み取り専用ランダム アクセスを提供し、XSLT への入力として使用されるようにデザインされています。このクラスは、XPathDocument、XmlDataDocument、および XmlDocument に実装されます。XPathNavigator は、『XML Path Language (XPath) Recommendation』のセクション 5 で説明されている W3C データ モデルに基づいています。
XPathNavigator は、任意のストアに対してカーソル モデルを定義し、高速で読み取り専用の XPath クエリを提供します。また、XPathNavigator クラスは、結果ツリー フラグメントの反復処理でも使用されます。
この API を使用すると、ストア内の現在のノードから情報を取得し、接続されているノードに移動できます。XPathNavigator は、一連の Move メソッドを使用してストアの走査を実行するカーソル スタイルのモデルです。XPathNavigator は、常にノード上に配置されます。Move メソッドのいずれかが失敗した場合、XPathNavigator は変更されません。
XPathNavigator クラスは、ノード フラグメントを反復処理するために使用されます。XML を含む fragment
パラメータを指定して関数を呼び出すことにより、スタイル シート内で結果ツリー フラグメントを作成するコード例を次に示します。
test.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl ="urn:schemas-microsoft-com:xslt"
xmlns:user="https://www.adventure-works.com"
version="1.0">
<xsl:variable name="fragment">
<authorlist>
<author>Joe</author>
</authorlist>
</xsl:variable>
<msxsl:script language="C#" implements-prefix="user">
<![CDATA[
string NodeFragment(XPathNavigator nav)
{
if (nav.HasChildren)
return nav.Value;
else
return "";
}
]]>
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:NodeFragment($fragment)"/>
</xsl:template>
</xsl:stylesheet>
test.xml
<root>Some text</root>
次の例では、test.xsl スタイル シートと test.xml 入力データを使用しています。
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Xml.XPath
Imports System.Text
Public Class sample
Public Shared Sub Main()
Dim xslt As New XslTransform()
xslt.Load("test.xsl")
Dim xd As New XPathDocument("test.xml")
Dim strmTemp = New FileStream("out.xml", FileMode.Create, FileAccess.ReadWrite)
xslt.Transform(xd, Nothing, strmTemp, Nothing)
End Sub 'Main
End Class 'sample
[C#]
using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Text;
public class sample
{
public static void Main()
{
XslTransform xslt = new XslTransform();
xslt.Load("test.xsl");
XPathDocument xd = new XPathDocument("test.xml");
Stream strmTemp = new FileStream("out.xml", FileMode.Create, FileAccess.ReadWrite);
xslt.Transform(xd, null, strmTemp, null);
}
}
変換結果はファイル out.xml に出力されます。
出力 (out.xml)
<?xml version="1.0" encoding="utf-8"?>Joe