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 gezeigt, wie Sie die XML-Daten aus einer Datei mithilfe der XmlTextReader
Klasse lesen.
Originalproduktversion: Visual C++
Ursprüngliche KB-Nummer: 815658
Zusammenfassung
In diesem Artikel wird beschrieben, wie Die Klasse zum Lesen der XmlTextReader
XML-Daten aus einer Datei verwendet wird. Die XmlTextReader
Klasse stellt eine direkte Analyse und Tokenisierung der XML-Daten bereit. Die XmlTextReader
Klasse implementiert außerdem die XML 1.0-Spezifikation zusätzlich zu den Namespaces in der XML-Spezifikation, die vom World Wide Web Consortium (W3C) definiert wird. In diesem Artikel wird beschrieben, wie Sie schnellen, tokenisierten Datenstromzugriff auf die XML-Daten ausführen, anstatt ein Objektmodell zu verwenden, z. B. das XML-Dokumentobjektmodell (DOM).
Eine Microsoft Visual C#-.NET-Version dieses Artikels finden Sie unter Lesen von XML aus einer Datei mithilfe von Visual C#.
Dieser Artikel bezieht sich auf den folgenden Microsoft .NET Framework-Klassenbibliotheksnamespace: System.xml
Anforderungen
In diesem Artikel wird davon ausgegangen, dass Sie mit den folgenden Themen vertraut sind:
- XML-Terminologie
- Erstellen und Lesen einer XML-Datei
In der folgenden Liste sind die empfohlenen Hardware-, Software-, Netzwerkinfrastruktur- und Service Packs aufgeführt, die Sie benötigen:
- Microsoft Visual Studio .NET
- Microsoft Visual Studio 2005
Lesen der XML-Daten aus einer Datei
Im Beispiel in diesem Artikel wird eine Datei mit dem Namen Books.xml verwendet. Sie können eine eigene Books.xml-Datei erstellen oder die Beispieldatei verwenden, die im Microsoft .NET Software Development Kit (SDK) QuickStarts enthalten ist. Sie müssen die Books.xml Datei in den Projektordner kopieren.
Führen Sie die folgenden Schritte aus, um die XML-Daten aus einer Datei zu lesen:
Starten Sie Visual Studio .NET 2002, Visual Studio .NET 2003 oder Visual Studio 2005.
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
Klicken Sie unter Projekttypen auf Visual C++-Projekte.
Notiz
In Visual Studio 2005 werden Visual C++-Projekte in Visual C++ geändert.
Klicken Sie unter "Vorlagen" auf "Verwaltete C++-Anwendung ", wenn Sie Visual Studio .NET 2002 verwenden.
Klicken Sie unter "Vorlagen" auf Konsolenanwendung (.NET), wenn Sie Visual Studio .NET 2003 verwenden.
Klicken Sie unter "Vorlagen" auf "CLR-Konsolenanwendung" , wenn Sie Visual Studio 2005 verwenden.
Geben Sie im Feld "Name" Q815658 ein, und klicken Sie dann auf "OK".
Fügen Sie im Projekt einen Verweis hinzu
System.xml.dll
. Weitere Informationen zum Hinzufügen von Verweisen zu einem verwalteten Visual C++-Projekt finden Sie unter Hinzufügen von Verweisen auf ein verwaltetes Visual C++-ProjektGeben Sie die using-Direktive im
System::Xml
Namespace wie folgt an:using namespace System::Xml;
Dies geschieht, damit Sie die
XmlTextReader
Klassendeklarationen später im Code nicht qualifizieren müssen. Sie müssen die using-Direktive vor anderen Deklarationen verwenden.Erstellen Sie eine Instanz des
XmlTextReader
Objekts. Füllen Sie dasXmlTextReader
Objekt mit der .xml-Datei auf.In der Regel wird die
XmlTextReader
Klasse verwendet, wenn Sie ohne den Aufwand des DOM auf die unformatierten XML-Daten zugreifen müssen. Daher bietet dieXmlTextReader
Klasse eine schnellere Möglichkeit zum Lesen der XML-Daten. DieXmlTextReader
Klasse weist unterschiedlicheconstructors
Angaben auf, die den Speicherort der XML-Daten angeben.Der folgende Code erstellt eine Instanz der
XmlTextReader
Klasse und lädt dann die Books.xml Datei. Fügen Sie der Funktion_tmain
folgenden Code hinzu:XmlTextReader* reader = new XmlTextReader ("books.xml");
Notiz
In Visual C++ 2005 wird die
_tmain
Funktion in die Hauptfunktion geändert.Lesen Sie die XML-Daten.
Notiz
In diesem Schritt wird eine äußere While-Schleife veranschaulicht. Die beiden Schritte, die diesen Schritt ausführen, veranschaulichen die Verwendung der While-Schleife zum Lesen der XML-Daten.
Nachdem Sie das
XmlTextReader
Objekt erstellt haben, verwenden Sie die Read-Methode, um die XML-Daten zu lesen.Die Read-Methode wechselt weiterhin sequenziell durch die .xml Datei, bis die Read-Methode das Ende der Datei erreicht. Wenn die Read-Methode das Ende der Datei erreicht, gibt die Read-Methode "false" zurück.
while (reader->Read()) { // Do some work here on the data. Console::WriteLine(reader->Name); }
Untersuchen Sie die Knoten.
Zum Verarbeiten der XML-Daten verfügt jeder Datensatz über einen Knotentyp, der anhand der
NodeType
Eigenschaft bestimmt werden kann. DieName
Eigenschaft und dieValue
Eigenschaft geben die folgenden Informationen für den aktuellen Knoten oder für den aktuellen Datensatz zurück:- Der Knotenname, der den Elementnamen und den Attributnamen darstellt.
- Der Knotenwert, der der Knotentext ist.
Die
NodeType
Enumeration bestimmt den Knotentyp. Im folgenden Codebeispiel werden der Name der Elemente und des Dokumenttyps angezeigt. Im folgenden Codebeispiel werden Elementattribute ignoriert:while (reader->Read()) { switch (reader->NodeType) { case XmlNodeType::Element: // The node is an element. Console::Write("<{0}", reader->Name); Console::WriteLine(">"); break; case XmlNodeType::Text: //Display the text in each element. Console::WriteLine (reader->Value); break; case XmlNodeType::EndElement: //Display the end of the element. Console::Write("</{0}", reader->Name); Console::WriteLine(">"); break; } }
Überprüfen Sie die Attribute.
Elementknotentypen können eine Liste von Attributknoten enthalten, die den Elementknotentypen zugeordnet sind. Die
MovetoNextAttribute
Methode durchläuft jedes Attribut im Element sequenziell. Verwenden Sie dieHasAttributes
Eigenschaft, um zu testen, ob der Knoten Attribute aufweist. DieAttributeCount
Eigenschaft gibt die Anzahl der Attribute für den aktuellen Knoten zurück.while (reader->Read()) { switch (reader->NodeType) { case XmlNodeType::Element: // The node is an element. Console::Write("<{0}", reader->Name); while (reader->MoveToNextAttribute()) // Read the attributes. Console::Write(" {0}='{1}'", reader->Name, reader->Value); Console::WriteLine(">"); break; case XmlNodeType::Text: //Display the text in each element. Console::WriteLine (reader->Value); break; case XmlNodeType::EndElement: //Display the end of the element. Console::Write("</{0}", reader->Name); Console::WriteLine(">"); break; } }
Speichern Sie die Projektmappe. Erstellen Sie die Projektmappe.
Drücken Sie STRG+F5, um die Beispielanwendung auszuführen.
Anzeigen des vollständigen Codeeintrags in Visual Studio .NET 2002 oder in Visual Studio .NET 2003
#include "stdafx.h"
#include <tchar.h>
#using <mscorlib.dll>
#using <System.xml.dll>
using namespace System;
using namespace System::Xml;
void _tmain(void)
{
XmlTextReader* reader = new XmlTextReader ("books.xml");
while (reader->Read())
{
switch (reader->NodeType)
{
case XmlNodeType::Element: // The node is an element.
Console::Write("<{0}", reader->Name);
while (reader->MoveToNextAttribute()) // Read the attributes.
Console::Write(" {0}='{1}'", reader->Name, reader->Value);
Console::WriteLine(">");
break;
case XmlNodeType::Text: //Display the text in each element.
Console::WriteLine (reader->Value);
break;
case XmlNodeType::EndElement: //Display the end of the element.
Console::Write("</{0}", reader->Name);
Console::WriteLine(">");
break;
}
}
Console::ReadLine();
}
Notiz
Sie müssen die Common Language Runtime-Unterstützungscompileroption (/clr:oldSyntax
) in Visual C++ 2005 hinzufügen, um das vorherige Codebeispiel erfolgreich zu kompilieren. Führen Sie die folgenden Schritte aus, um die Compileroption für die Common Language Runtime-Unterstützung in Visual C++ 2005 hinzuzufügen:
Klicken Sie auf "Projekt" und dann auf< "ProjectName-Eigenschaften>".
Notiz
<ProjectName> ist ein Platzhalter für den Namen des Projekts.
Erweitern Sie konfigurationseigenschaften, und klicken Sie dann auf " Allgemein".
Klicken Sie hier, um die Unterstützung von Common Language Runtime, alte Syntax (/clr:oldSyntax) in der Projekteinstellung für Common Language Runtime-Unterstützung im rechten Bereich auszuwählen, klicken Sie auf "Übernehmen", und klicken Sie dann auf "OK".
Weitere Informationen zur Compileroption zur Unterstützung der Common Language Runtime finden Sie unter /clr (Common Language Runtime Compilation).For more information about the common language runtime support compiler option, see /clr (Common Language Runtime Compilation).
Diese Schritte gelten für den gesamten Artikel.
Anzeigen der Beispielausgabe
<bookstore>
<book genre='autobiography' publicationdate='1981' 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' 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' ISBN='1-861001-57-6'>
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>
Problembehandlung
Wenn Sie die Beispielanwendung ausführen, wird möglicherweise die folgende Fehlermeldung angezeigt:
Eine unbehandelte Ausnahme vom Typ "System.Xml.XmlException" ist in System.xml.dll Zusätzliche Informationen aufgetreten: Systemfehler.
References
Weitere Informationen zum Lesen von XML mit xmlReader finden Sie unter Lesen von XML mit xmlReader.