Freigeben über


"XPathNodeIterator" in Transformationen

XPathNodeIterator stellt Methoden zum Durchlaufen einer Knotengruppe dar, die als Ergebnis einer XPath-Abfrage (XML Path Language) oder als Konvertierung eines Ergebnisstrukturfragments mit der node-set-Methode in eine Knotengruppe erstellt wurde. Mit XPathNodeIterator können die Knoten innerhalb dieser Knotengruppe durchlaufen werden. Nach dem Abrufen der Knotengruppe stellt die XPathNodeIterator-Klasse einen schreibgeschützten vorwärtsgerichteten Cursor für die ausgewählte Knotengruppe bereit. Die Knotengruppe wird in der Dokumentreihenfolge erstellt, sodass beim Aufrufen dieser Methode mit dem nächsten Knoten in der Dokumentreihenfolge fortgefahren wird. XPathNodeIterator erstellt keine Knotenstruktur aller Knoten im Satz. Stattdessen stellt er ein Fenster bereit, wodurch der zugrunde liegende Knoten, auf den er verweist, während der Bewegung durch die Struktur verfügbar gemacht wird. Mit den Methoden und Eigenschaften der XPathNodeIterator-Klasse können Sie Informationen aus dem aktuellen Knoten abrufen. Eine Liste der verfügbaren Methoden und Eigenschaften finden Sie unter XPathNodeIterator-Member.

Da sich ein XPathNodeIterator nur vorwärts durch eine Gruppe von Knoten bewegt, die aus einer XPath-Abfrage erstellt wurden, wird die MoveNext-Methode zum Durchlaufen verwendet. Der Rückgabetyp dieser Methode ist Boolean. Es wird true zurückgegeben, wenn zum nächsten ausgewählten Knoten gewechselt wird, und es wird false zurückgegeben, wenn kein ausgewählter Knoten mehr vorhanden ist. In der folgenden Liste werden die Eigenschaften aufgeführt, die verfügbar sind, wenn true zurückgegeben wird:

Nach der Erstellen einer Knotengruppe muss MoveNext aufgerufen werden, um den XPathNodeIterator auf dem ersten Knoten der ausgewählten Gruppe zu positionieren. Dies ermöglicht die Verwendung einer while-Schleife.

Im folgenden Codebeispiel wird gezeigt, wie ein XPathNodeIterator für eine XslTransform als Parameter in der XsltArgumentList übergeben wird. Die Eingabe im Code ist books.xml, und das Stylesheet ist text.xsl. Die Datei test.xml ist das XPathDocument.

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 Doc As New XPathDocument("books.xml")
      Dim nav As XPathNavigator = Doc.CreateNavigator()
      Dim Iterator As XPathNodeIterator = nav.Select("/bookstore/book")

      Dim arg As New XsltArgumentList()
      arg.AddParam("param1", "", Iterator)

      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, arg, 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()
    {
        XPathDocument Doc = new XPathDocument("books.xml");
        XPathNavigator nav = Doc.CreateNavigator();
        XPathNodeIterator Iterator = nav.Select("/bookstore/book");

        XsltArgumentList arg = new XsltArgumentList();
        arg.AddParam("param1", "", Iterator);

        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, arg, strmTemp, null);
    }
}

books.xml

<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database. -->
<bookstore specialty="novel">
    <book style="autobiography">
    <title>Seven Years in Trenton</title>
        <author>
            <first-name>Jay</first-name>
            <last-name>Adams</last-name>
            <award>Trenton Literary Review Honorable Mention</award>
            <country>USA</country>
        </author>
        <price>12</price>
    </book>
    <book style="textbook">
        <title>History of Trenton</title>
        <author>
            <first-name>Kim</first-name>
            <last-name>Akers</last-name>
            <publication>
                Selected Short Stories of
                <first-name>Scott</first-name>
                <last-name>Bishop</last-name>
                <country>US</country>
            </publication>
        </author>
        <price>55</price>
    </book>
</bookstore>

test.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">

<xsl:output method="xml" indent="yes"/>
<xsl:param name="param1"/>

<xsl:template match="/">
    <out>
        <xsl:for-each select="$param1/title">
            <title><xsl:value-of select="."/></title>
        </xsl:for-each>
    </out>
</xsl:template>

</xsl:stylesheet>

test.xml

<Title attr="Test">this is a test</Title>

Ausgabe (out.xml)

<?xml version="1.0" encoding="utf-8"?>
<out>
  <title>Seven Years in Trenton</title>
  <title>History of Trenton</title>
</out>

Siehe auch

Konzepte

Implementierung des XSLT-Prozessors durch die XslTransform-Klasse