"XPathNavigator" in Transformationen
Aktualisiert: November 2007
Die XPathNavigator-Klasse ermöglicht zufälligen schreibgeschützten Datenzugriff und ist als Eingabe für XSLT (Extensible Stylesheet Language for Transformations). Sie ist im XPathDocument, im XmlDataDocument und im XmlDocument implementiert. Der XPathNavigator basiert auf dem W3C-Datenmodell (World Wide Web Consortium) wie in Abschnitt 5 der XPath-Empfehlung (XML Path Language) beschrieben.
Der XPathNavigator definiert ein Modell eines Cursors für einen beliebigen Datenspeicher und ermöglicht schnelle schreibgeschützte XPath-Abfragen für einen beliebigen Datenspeicher. Der XPathNavigator ist auch die Klasse, die zum Durchlaufen von Ereignisstrukturfragmenten verwendet wird.
Mithilfe der API können Sie Informationen aus dem aktuellen Knoten in dem Speicher abrufen und zu verbundenen Knoten wechseln. Der XPathNavigator ist ein Cursormodell, bei dem das Durchlaufen eines Speichers mithilfe einer Gruppe von Move-Methoden durchgeführt wird. Der XPathNavigator ist immer auf einem Knoten positioniert. Bei einem fehlgeschlagenen Aufruf einer Move-Methode wird der XPathNavigator nicht geändert.
Der XPathNavigator ist die Klasse, die zum Durchlaufen von Ereignisstrukturfragmenten verwendet wird. Im folgenden Codebeispiel wird ein Ergebnisstrukturfragment in einem Stylesheet erstellt. Dabei wird die Funktion mit dem Parameter fragment aufgerufen, der XML enthält.
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>
Im folgenden Codebeispiel werden das test.xsl-Stylesheet und die test.xml-Eingabedaten verwendet.
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
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);
}
}
Ausgabe
Das Ergebnis der Transformation befindet sich in der Datei out.xml:
<?xml version="1.0" encoding="utf-8"?>Joe
Siehe auch
Konzepte
Implementierung des XSLT-Prozessors durch die XslTransform-Klasse