Verwenden von Visual C# zum Navigieren in XML-Dokumenten mit der XPathNavigator-Klasse
In diesem Artikel wird beschrieben, wie Sie in XML-Dokumenten mit einem XPathNavigator
Objekt navigieren, das aus einem XPathDocument
-Objekt erstellt wird.
Ursprüngliche Produktversion: Visual C#
Ursprüngliche KB-Nummer: 308343
Zusammenfassung
In diesem Beispiel wird ein XPathDocument
-Objekt mit XML-Daten geladen, ein XPathNavigator
-Objekt als Ansicht für die Daten erstellt und der XML-Code angezeigt, indem das Dokument durchlaufen wird.
Dieser Artikel bezieht sich auf die folgenden Namespaces der Microsoft .NET Framework-Klassenbibliothek:
System.Xml
System.Xml.XPath
Eine Microsoft Visual Basic .NET-Version dieses Artikels finden Sie unter Navigieren in XML mit der XPathNavigator-Klasse mithilfe von Visual Basic.
Anforderungen
In diesem Artikel wird davon ausgegangen, dass Sie mit den folgenden Themen vertraut sind:
- Visual C#
- XML-Terminologie
- Erstellen und Lesen einer XML-Datei
- XPath-Syntax (XML Path Language)
Verwenden der XPathNavigator-Klasse zum Navigieren in XML
Erstellen Sie eine neue Visual C#-Konsolenanwendung in Visual Studio.
Hinweis
In diesem Beispiel wird eine Datei namensBooks.xmlverwendet. Sie können eine eigene Books.xml-Datei erstellen oder das Beispiel verwenden, das in den Schnellstarts für .NET Software Development Kit (SDK) enthalten ist. Wenn Sie die Schnellstartanleitungen nicht installiert haben und sie nicht installieren möchten, finden Sie im Abschnitt Verweise den Books.xml Downloadspeicherort. Wenn Sie die Schnellstartanleitungen installiert haben, befindet sich Books.xml im folgenden Ordner:
\Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
Sie können Books.xml in den
\Bin\Debug
Ordner kopieren, der sich unter dem Ordner befindet, in dem Sie dieses Projekt erstellt haben.Stellen Sie sicher, dass das Projekt auf den
System.Xml
Namespace verweist.Verwenden Sie die
using
-Anweisung für dieXml
Namespaces undXPath
, damit Sie Deklarationen in diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Sie können dieusing
-Anweisung wie folgt vor allen anderen Deklarationen verwenden:using System.Xml; using System.Xml.XPath;
Deklarieren Sie die entsprechenden Variablen. Deklarieren Sie ein
XPathDocument
-Objekt, das das XML-Dokument enthält, und einXPathNavigator
-Objekt, um Ausdrücke auszuwertenXPath
und durch das Dokument zu navigieren. Deklarieren Sie einString
-Objekt, das denXPath
Ausdruck enthält. Fügen Sie den Deklarationscode in derMain
Prozedur in Module1 hinzu.XPathNavigator nav; XPathDocument docNav;
Laden Sie ein
XPathDocument
Objekt mit der Beispieldatei Books.xml. DieXPathDocument
-Klasse verwendet XSLT (Extensible Stylesheet Language Transformations), um einen schnellen und leistungsorientierten Cache für die XML-Dokumentverarbeitung bereitzustellen. Es ähnelt dem XML-Dokumentobjektmodell (DOM), ist aber stark für die XSLT-Verarbeitung und das XPath-Datenmodell optimiert.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
Erstellen Sie ein
XPathNavigator
Objekt aus dem Dokument.XPathNavigator
ermöglicht es Ihnen, sowohl die Attributknoten als auch die Namespaceknoten in einem XML-Dokument zu durchlaufen.// Create a navigator to query with XPath. nav = docNav.CreateNavigator();
Wechseln Sie mit
MoveToRoot
der -Methode zum Stamm des Dokuments.MoveToRoot
legt den Navigator auf den Dokumentknoten fest, der die gesamte Struktur der Knoten enthält.//Initial XPathNavigator to start at the root. nav.MoveToRoot();
Verwenden Sie die
MoveToFirstChild
-Methode, um zu den untergeordneten Elementen des XML-Dokuments zu wechseln. DieMoveToFirstChild
-Methode wird zum ersten untergeordneten Element des aktuellen Knotens verschoben. Wenn die Books.xml Quelle vorhanden ist, wechseln Sie vom Stammdokument in die untergeordneten Elemente, den Kommentarabschnitt und den Knoten Bookstore.//Move to the first child node (comment field). nav.MoveToFirstChild();
Verwenden Sie die
MoveToNext
-Methode, um Knoten auf gleichgeordneter Ebene zu durchlaufen. DieMoveToNext
-Methode wechselt zum nächsten gleichgeordneten Element des aktuellen Knotens.//Loop through all of the root nodes. do { } while (nav.MoveToNext());
Verwenden Sie die
NodeType
-Eigenschaft, um sicherzustellen, dass Sie nur Elementknoten verarbeiten, und verwenden Sie dieValue
-Eigenschaft, um die Textdarstellung des Elements anzuzeigen.do { //Find the first element. if (nav.NodeType == XPathNodeType.Element) { //Determine whether children exist. if (nav.HasChildren == true) { //Move to the first child. nav.MoveToFirstChild(); //Loop through all the children. do { //Display the data. Console.Write("The XML string for this child "); Console.WriteLine("is '{0}'", nav.Value); } while (nav.MoveToNext()); } } } while (nav.MoveToNext());
Verwenden Sie die
HasAttributes
-Eigenschaft, um zu bestimmen, ob ein Knoten über Attribute verfügt. Sie können auch andere Methoden wieMoveToNextAttribute
verwenden, um zu einem Attribut zu wechseln und dessen Wert zu überprüfen.Hinweis
Dieses Codesegment durchläuft nur die Nachfolger des Stammknotens und nicht die gesamte Struktur.
do { //Find the first element. if (nav.NodeType == XPathNodeType.Element) { //if children exist if (nav.HasChildren == true) { //Move to the first child. nav.MoveToFirstChild(); //Loop through all the children. do { //Display the data. Console.Write("The XML string for this child "); Console.WriteLine("is '{0}'", nav.Value); //Check for attributes. if (nav.HasAttributes == true) { Console.WriteLine("This node has attributes"); } } while (nav.MoveToNext()); } } } while (nav.MoveToNext());
Verwenden Sie die
ReadLine
-Methode desConsole
-Objekts, um eine Pause am Ende der Konsolenanzeige hinzuzufügen, um die oben genannten Ergebnisse leichter anzuzeigen.//Pause. Console.ReadLine();
Erstellen Sie das Visual C#-Projekt, und führen Sie es aus.
Vollständige Codeauflistung
using System;
using System.Xml;
using System.Xml.XPath;
namespace q308343
{
class Class1
{
static void Main(string[] args)
{
XPathNavigator nav;
XPathDocument docNav;
docNav = new XPathDocument(@"c:\books.xml");
nav = docNav.CreateNavigator();
nav.MoveToRoot();
//Move to the first child node (comment field).
nav.MoveToFirstChild();
do
{
//Find the first element.
if (nav.NodeType == XPathNodeType.Element)
{
//Determine whether children exist.
if (nav.HasChildren == true)
{
//Move to the first child.
nav.MoveToFirstChild();
//Loop through all of the children.
do
{
//Display the data.
Console.Write("The XML string for this child ");
Console.WriteLine("is '{0}'", nav.Value);
//Check for attributes.
if (nav.HasAttributes == true)
{
Console.WriteLine("This node has attributes");
}
} while (nav.MoveToNext());
}
}
} while (nav.MoveToNext());
//Pause.
Console.ReadLine();
}
}
}
Problembehandlung
Wenn Sie den Code testen, erhalten Sie möglicherweise die folgende Ausnahmefehlermeldung:
Eine nicht behandelte Ausnahme vom Typ System.Xml. XmlException in system.xml.dll
Zusätzliche Informationen: Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten im Dokument sein, und davor dürfen keine Leerzeichen angezeigt werden. Zeile 1, Position
Der Ausnahmefehler tritt in der folgenden Codezeile auf:
docNav = new XPathDocument("c:\\books.xml");
Um den Fehler zu beheben, entfernen Sie die Leerzeichen, die dem ersten Knoten im books.xml Dokument vorangehen.
References
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für