Wie Sie die XML-Daten aus einer Datei lesen unter Verwendeung von Visual C++

Eine Microsoft Visual C# .NET Version dieses Artikels finden Sie unter
307548 .

Eine Microsoft Visual Basic .NET Version dieses Artikels finden Sie unter
301225 .

Dieser Artikel bezieht sich auf den folgenden Namespace für Microsoft.NET Framework-Klassenbibliothek:

System.xml

IN DIESER AUFGABE

Zusammenfassung

Dieser Artikel beschreibt, wie Sie die XmlTextReader -Klasse verwenden, um die XML-Daten aus einer Datei zu lesen. Die XmlTextReader -Klasse bietet direkten Analyse und Wörtern XML-Daten. Die
XmlTextReader -Klasse implementiert auch XML 1.0-Spezifikation neben den Namespaces in der XML-Spezifikation, die vom World Wide Web Consortium (W3C) definiert. Dieser Artikel beschreibt, wie Sie schnell tun, Token Streamzugriff auf XML-Daten, anstatt ein Objektmodell wie das Model (DOM).

zurück zum Anfang

Voraussetzungen

Es wird vorausgesetzt, dass Sie mit folgenden Themen vertraut sind:
  • XML-Terminologie
  • Erstellen und Lesen einer XML-Datei

Die folgende Liste enthält die empfohlene Hardware, Software, Netzwerkinfrastruktur und Servicepacks, die Sie benötigen:
  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005
zurück zum Anfang

Lesen Sie die XML-Daten aus einer Datei.

Das Beispiel in diesem Artikel verwendet eine Datei namens "Books.xml". Erstellen Sie eine eigene Datei Books.xml oder die Microsoft .NET Software Development Kit (SDK) Schnellstarts enthaltene Beispieldatei verwenden. Die Datei Books.xml steht zum Download im Microsoft Download Center zur Verfügung:Sie müssen die Datei Books.xml in den Projektordner kopieren.


Gehen Sie folgendermaßen vor, um die XML-Daten aus einer Datei gelesen:
  1. Starten Sie Visual Studio .NET 2002, Visual Studio .NET 2003 oder Visual Studio 2005.
  2. Zeigen Sie im Menü Datei auf
    Neu, und klicken Sie dann auf Projekt.

    Die
    Im Dialogfeld Neues Projekt angezeigt wird.
  3. Klicken Sie unter Projekttypenauf Visual C++-Projekte.

    Hinweis In Visual Studio 2005 wird Visual C++-Projekte in Visual C++geändert.
  4. Klicken Sie unter Vorlagenauf
    Verwaltete C++-Anwendung verwenden Sie Visual Studio .NET 2002.

    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.
  5. Geben Sie im Feld Name
    Q815658, und klicken Sie dann auf OK.
  6. Fügen Sie im Projekt einen Verweis ein auf System.xml.dll ein. Weitere Informationen zu verwalteten Visual C++-Projekt Verweise hinzufügen klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:

    310674 HOW TO: Fügen Sie Verweise auf verwalteten Visual C++-Projekt

  7. Spezifizieren der using- Direktive im System::Xml-Namespace wie folgt:
    using namespace System::Xml;
    Tun Sie folgendes, damit Sie keinen XmlTextReader -Klassendeklarationen später in Ihrem Code vornehmen müssen. Verwenden Sie die using- Direktive vor allen anderen Deklarationen.
  8. Erstellen Sie eine Instanz der XmlTextReader - Objekt. Füllen Sie das XmlTextReader -Objekt mit der XML- Datei.

    In der Regel die XmlTextReader -Klasse verwendet wird, haben Sie die unformatierten XML-Daten ohne den Overhead von DOM zugreifen Daher bietet die Klasse XmlTextReader schneller XML-Daten gelesen. Die XmlTextReader -Klasse verfügt über verschiedene Konstruktoren, die den Speicherort der XML-Daten an.

    Der folgende Code erstellt eine Instanz der XmlTextReader -Klasse und lädt die Datei Books.xml. Fügen Sie den folgenden Code der Funktion _tmain :
    XmlTextReader* reader = new XmlTextReader ("books.xml");
    Hinweis In Visual C++ 2005 wird die Funktion _tmain in der main -Funktion geändert.
  9. Die XML-Daten lesen.

    Hinweis Dieser Schritt veranschaulicht eine äußere während der Schleife. Die zwei Schritte dieser Schritt demonstrieren die while -Schleife verwenden, um die XML-Daten lesen.

    Nach dem Erstellen des XmlTextReader -Objekts verwenden Sie die Read -Methode zum Lesen von XML-Daten.

    Die Read -Methode weiterhin die XML-Datei sequenziell durchlaufen, bis die Read -Methode das Ende der Datei erreicht. Wenn die Read -Methode das Ende der Datei erreicht, gibt die Read -Methode falsezurück.
    while (reader->Read()){
    // Do some work here on the data.
    Console::WriteLine(reader->Name);
    }
  10. Untersuchen Sie die Knoten.

    Zum Verarbeiten der XML-Daten besitzt jeder Datensatz einen Knotentyp NodeType -Eigenschaft bestimmt werden kann. Die Name -Eigenschaft und die Value -Eigenschaft geben Sie die folgende Informationen für den aktuellen Knoten oder für den aktuellen Datensatz zurück:
    • Der Knotenname den Namen des Elements und dem Attributnamen.
    • Der Knotenwert den Knotentext.
    Die Aufzählung NodeType bestimmt den Knotentyp. Das folgende Codebeispiel zeigt den Namen der Elemente und den Dokumenttyp an. 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;
    }
    }
  11. Überprüfen Sie die Attribute.

    Elementknotentypen können eine Liste von Attributknoten enthalten, die Elementknotentypen zugeordnet sind. MovetoNextAttribute -Methode durchläuft jedes Attribut im Element sequenziell. Verwenden Sie die HasAttributes -Eigenschaft, welche überprüft, ob der Knoten über Attribute verfügt. Die AttributeCount -Eigenschaft gibt die Anzahl der Attribute für den aktuellen Knoten.
    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;
    }
    }
  12. Speichern Sie die Projektmappe. Erstellen der Lösung.
  13. Drücken Sie STRG + F5, um die beispielanwendung ausgeführt.
zurück zum Anfang

Zeigen Sie den vollständigen Code in Visual Studio .NET 2002 oder Visual Studio .NET 2003 an

#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();
}
Hinweis Fügen Sie die common Language Runtime Support Compileroption (/ CLR: oldSyntax) in Visual C++ 2005 um den vorhergehenden Beispielcode kompilieren. Um die common Language Runtime Support Compileroption in Visual C++ 2005 hinzuzufügen, gehen Sie folgendermaßen vor:

  1. Klicken Sie auf Projekt, und klicken Sie dann auf Eigenschaften von < Projektname > .



    Hinweis < Projektname > ist ein Platzhalter für den Namen des Projekts.
  2. Erweitern Sie Konfigurationseigenschaftenund dann auf Allgemein.

  3. Klicken Sie auf Common Language Runtime-Unterstützung, alte Syntax (/ CLR: oldSyntax) in der Common Language Runtime unterstützen projekteinstellung im rechten Bereich klicken Sie auf Übernehmenund dann auf OK.

Weitere Informationen über die common Language Runtime unterstützen Sie Compileroption, besuchen Sie folgende Website von Microsoft:
/ CLR (common Language Runtime Compilation)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Diese Schritte gelten für den gesamten Artikel.

zurück zum Anfang

Anzeigen der Ausgabe

Hinweis Die Schnellstarts des .NET SDK enthaltene Datei Books.xml hat zwei Unterschiede in der Datei Books.xml vom Downloadlink im Abschnitt "XML-Daten aus einer Datei lesen" genannt.
  • Die Datei Books.xml vom Downloadlink keinen der
    Publicationdate -Attribut.
  • Die Datei Books.xml vom Downloadlink keinen der
    ISBN -Attribut.
<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>
zurück zum Anfang

Problembehandlung:

Wenn Sie beispielanwendung ausführen, erhalten Sie folgende Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs System.Xml.XmlException in System.xml.dll aufgetreten.
Zusätzliche Informationen: Systemfehler.
Diese Fehlermeldung kann bei Verwendung von den Downloadlink erwähnte Datei Books.xml im Abschnitt "XML-Daten aus einer Datei lesen". Dieses Problem kann auftreten, wenn die Datei Books.xml am Anfang der Datei ein Leerzeichen enthält. Um dieses Problem zu beheben, öffnen Sie die Datei "Books.xml" mit einem Texteditor, und entfernen Sie Leerraum.

zurück zum Anfang

Referenzen

Weitere Informationen zum Lesen von XML mit dem XmlReader finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:zurück zum Anfang
Eigenschaften

Artikelnummer: 815658 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0, Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition

Feedback