Extrahieren von XML-Daten mit 'XPathNavigator'

Aktualisiert: November 2007

Es gibt in Microsoft .NET Framework mehre Möglichkeiten zur Darstellung eines XML-Dokuments. Es kann ein String oder eine der Klassen XmlReader, XmlWriter, XmlDocument oder XPathDocument verwendet werden. Um den Wechsel zwischen verschiedenen Darstellungen eines XML-Dokuments zu erleichtern, stellt die XPathNavigator-Klasse eine Reihe von Methoden und Eigenschaften zum Extrahieren von XML als String, als XmlReader-Objekt oder als XmlWriter-Objekt bereit.

Konvertiert einen "XPathNavigator" in eine Zeichenfolge.

Die OuterXml-Eigenschaft der XPathNavigator-Klasse wird zum Abrufen des Markups des ganzen XML-Dokuments oder des Markups eines einzelnen Knotens und seiner untergeordneten Knoten verwendet.

Hinweis:

Die InnerXml-Eigenschaft ruft das Markup der einem Knoten untergeordneten Knoten ab.

Im folgenden Codebeispiel wird das ganze in einem XPathNavigator-Objekt enthaltene XML-Dokument sowohl als String als auch als einzelner Knoten mit untergeordneten Knoten gespeichert.

Dim document As XPathDocument = New XPathDocument("input.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

' Save the entire input.xml document to a string.
Dim xml As String = navigator.OuterXml

' Now save the Root element and its child nodes to a string.
navigator.MoveToChild(XPathNodeType.Element)
Dim root As String = navigator.OuterXml
XPathDocument document = new XPathDocument("input.xml");
XPathNavigator navigator = document.CreateNavigator();

// Save the entire input.xml document to a string.
string xml = navigator.OuterXml;

// Now save the Root element and its child nodes to a string.
navigator.MoveToChild(XPathNodeType.Element);
string root = navigator.OuterXml;

Konvertiert von "XPathNavigator" in "XmlReader"

Mit der ReadSubtree-Methode wird gesamte Inhalt eines XML-Dokuments oder nur ein einzelner Knoten und seine untergeordneten Knoten als Stream in ein XmlReader-Objekt übertragen.

Beim Erstellen des XmlReader-Objekts aus dem aktuellen Knoten und den untergeordneten Knoten wird die ReadState-Eigenschaft des XmlReader-Objekts auf Initial festgelegt. Wenn die Read-Methode des XmlReader-Objekts zum ersten Mal aufgerufen wird, wird der XmlReader auf dem aktuellen Knoten des XPathNavigator positioniert. Das neue XmlReader-Objekt liest, bis das Ende der XML-Struktur erreicht ist. In diesem Fall gibt die Read-Methode false zurück und die ReadState-Eigenschaft des XmlReader-Objekts wird auf EndOfFile festgelegt.

Die Position des XPathNavigator-Objekts wird durch das Erstellen oder das Verschieben des XmlReader-Objekts nicht geändert. Ein Aufruf der ReadSubtree-Methode ist nur dann zulässig, wenn das Objekt auf einem Element oder auf dem Stammknoten positioniert ist.

Im folgenden Beispiel wird ein XmlReader-Objekt erstellt, das das ganze XML-Dokument sowohl in einem XPathDocument-Objekt als auch als einzelnen Knoten mit untergeordneten Knoten enthält.

Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

' Stream the entire XML document to the XmlReader.
Dim xml As XmlReader = navigator.ReadSubtree()

While xml.Read()
    Console.WriteLine(xml.ReadInnerXml())
End While

xml.Close()

' Stream the book element and its child nodes to the XmlReader.
navigator.MoveToChild("bookstore", "")
navigator.MoveToChild("book", "")

Dim book As XmlReader = navigator.ReadSubtree()

While book.Read()
    Console.WriteLine(book.ReadInnerXml())
End While

book.Close()
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

// Stream the entire XML document to the XmlReader.
XmlReader xml = navigator.ReadSubtree();

while (xml.Read())
{
    Console.WriteLine(xml.ReadInnerXml());
}

xml.Close();

// Stream the book element and its child nodes to the XmlReader.
navigator.MoveToChild("bookstore", "");
navigator.MoveToChild("book", "");

XmlReader book = navigator.ReadSubtree();

while (book.Read())
{
    Console.WriteLine(book.ReadInnerXml());
}

book.Close();

In diesem Beispiel wird die Datei books.xml als Eingabe verwendet.

<bookstore>
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

Konvertieren von "XPathNavigator" in "XmlWriter"

Mit der WriteSubtree-Methode wird gesamte Inhalt eines XML-Dokuments oder nur ein einzelner Knoten und seine untergeordneten Knoten als Stream in ein XmlWriter-Objekt übertragen.

Die Position des XPathNavigator-Objekts wird durch das Erstellen des XmlWriter-Objekts nicht geändert.

Im folgenden Beispiel wird ein XmlWriter-Objekt erstellt, das das ganze XML-Dokument sowohl in einem XPathDocument-Objekt als auch als einzelnen Knoten mit untergeordneten Knoten enthält.

Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

' Stream the entire XML document to the XmlWriter.
Dim xml As XmlWriter = XmlWriter.Create("newbooks.xml")
navigator.WriteSubtree(xml)
xml.Close()

' Stream the book element and its child nodes to the XmlWriter.
navigator.MoveToChild("bookstore", "")
navigator.MoveToChild("book", "")

Dim book As XmlWriter = XmlWriter.Create("book.xml")
navigator.WriteSubtree(book)
book.Close()
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

// Stream the entire XML document to the XmlWriter.
XmlWriter xml = XmlWriter.Create("newbooks.xml");
navigator.WriteSubtree(xml);
xml.Close();

// Stream the book element and its child nodes to the XmlWriter.
navigator.MoveToChild("bookstore", "");
navigator.MoveToChild("book", "");

XmlWriter book = XmlWriter.Create("book.xml");
navigator.WriteSubtree(book);
book.Close();

In dem Beispiel wird die bereits erwähnte Datei books.xml als Eingabe verwendet.

Siehe auch

Konzepte

Verarbeiten von XML-Daten mithilfe des XPath-Datenmodells

Navigieren in Knotengruppen mit "XPathNavigator"

Das Navigieren durch Attribut- und Namespaceknoten mit "XPathNavigator"

Zugreifen auf streng typisierte XML-Daten mit 'XPathNavigator'

Referenz

XmlDocument

XPathDocument

XPathNavigator