Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Sie in XML-Dokumenten mit einem XPathNavigator Objekt navigieren, das aus einem XPathDocument Objekt erstellt wird.
Originalproduktversion: 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 Microsoft .NET Framework-Klassenbibliotheksnamespaces:
System.XmlSystem.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
- XML Path Language (XPath)-Syntax
Verwenden der XPathNavigator-Klasse zum Navigieren in XML
Erstellen Sie eine neue Visual C#-Konsolenanwendung in Visual Studio.
Notiz
In diesem Beispiel wird eine Datei namens Books.xml verwendet. Sie können eine eigene Books.xml-Datei erstellen oder das Beispiel verwenden, das in den Schnellstarts von .NET Software Development Kit (SDK) enthalten ist. Wenn Sie die Schnellstarts nicht installiert haben und sie nicht installieren möchten, lesen Sie den Abschnitt "Verweise " für den Downloadspeicherort Books.xml . Wenn Sie die Schnellstarts installiert haben, befindet sich Books.xml im folgenden Ordner:
\Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VBSie können Books.xml in den
\Bin\DebugOrdner kopieren, der sich unter dem Ordner befindet, in dem Sie dieses Projekt erstellt haben.Stellen Sie sicher, dass das Projekt auf den
System.XmlNamespace verweist.Verwenden Sie die
usingAnweisung für die Namespaces undXPathdieXmlNamespaces, damit Sie Deklarationen in diesen Namespaces später im Code nicht qualifizieren müssen. Sie können dieusingAnweisung vor anderen Deklarationen wie folgt verwenden:using System.Xml; using System.Xml.XPath;Deklarieren Sie die entsprechenden Variablen. Deklarieren Sie ein
XPathDocumentObjekt, das das XML-Dokument und einXPathNavigatorObjekt enthält, um Ausdrücke auszuwertenXPathund durch das Dokument zu navigieren. Deklarieren Sie einStringObjekt, das denXPathAusdruck enthält. Fügen Sie den Deklarationscode in derMainProzedur in Module1 hinzu.XPathNavigator nav; XPathDocument docNav;Laden Sie ein
XPathDocumentObjekt mit der Beispieldatei Books.xml. DieXPathDocumentKlasse verwendet XSLT (Extensible Stylesheet Language Transformations), um einen schnellen und leistungsorientierten Cache für die XML-Dokumentverarbeitung bereitzustellen. Das XML-Dom (Document Object Model) ähnelt dem XML-Dokumentobjektmodell, ist aber für die XSLT-Verarbeitung und das XPath-Datenmodell hoch optimiert.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Erstellen Sie ein
XPathNavigatorObjekt aus dem Dokument.XPathNavigatorermö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 zum Stamm des Dokuments mit der
MoveToRootMethode.MoveToRootlegt den Navigator auf den Dokumentknoten fest, der die gesamte Struktur von Knoten enthält.//Initial XPathNavigator to start at the root. nav.MoveToRoot();Verwenden Sie die
MoveToFirstChildMethode, um zu den untergeordneten Elementen des XML-Dokuments zu wechseln. DieMoveToFirstChildMethode wechselt zum ersten untergeordneten Element des aktuellen Knotens. Wenn die Books.xml Quelle vorhanden ist, wechseln Sie vom Stammdokument in die untergeordneten Elemente, den Abschnitt "Kommentar" und den Knoten "Bookstore".//Move to the first child node (comment field). nav.MoveToFirstChild();Verwenden Sie die
MoveToNextMethode, um Knoten auf gleichgeordneter Ebene zu durchlaufen. DieMoveToNextMethode wechselt zum nächsten gleichgeordneten Knoten des aktuellen Knotens.//Loop through all of the root nodes. do { } while (nav.MoveToNext());Verwenden Sie die
NodeTypeEigenschaft, um sicherzustellen, dass Nur Elementknoten verarbeitet werden, und verwenden Sie dieValueEigenschaft, 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
HasAttributesEigenschaft, um zu bestimmen, ob ein Knoten Attribute aufweist. Sie können auch andere Methoden verwenden, zMoveToNextAttribute. B. um zu einem Attribut zu wechseln und den Wert zu überprüfen.Notiz
Dieses Codesegment führt nur durch die Absteigendpunkte des Stammknotens und nicht durch 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
ReadLineMethode desConsoleObjekts, um am Ende der Konsolenanzeige eine Pause hinzuzufügen, um die obigen Ergebnisse leichter anzuzeigen.//Pause. Console.ReadLine();Erstellen sie das Visual C#-Projekt, und führen Sie es aus.
Vollständige Codeliste
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, wird möglicherweise die folgende Ausnahmefehlermeldung angezeigt:
In system.xml.dll ist eine unbehandelte Ausnahme vom Typ "System.Xml.XmlException" aufgetreten.
Zusätzliche Informationen: Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten im Dokument sein, und vor dem Dokument dürfen keine Leerzeichen angezeigt werden. Linie 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 vorausgehen.