Freigeben über


Lesen der XML-Daten aus einer Datei mithilfe von Visual C++

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:

  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.

    Das Dialogfeld Neues Projekt wird angezeigt.

  3. Klicken Sie unter Projekttypen auf Visual C++-Projekte.

    Notiz

    In Visual Studio 2005 werden Visual C++-Projekte in Visual C++ geändert.

  4. 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.

  5. Geben Sie im Feld "Name" Q815658 ein, und klicken Sie dann auf "OK".

  6. 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++-Projekt

  7. Geben 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.

  8. Erstellen Sie eine Instanz des XmlTextReader Objekts. Füllen Sie das XmlTextReader 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 die XmlTextReader Klasse eine schnellere Möglichkeit zum Lesen der XML-Daten. Die XmlTextReader Klasse weist unterschiedliche constructors 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.

  9. 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);
    }
    
  10. Untersuchen Sie die Knoten.

    Zum Verarbeiten der XML-Daten verfügt jeder Datensatz über einen Knotentyp, der anhand der NodeType Eigenschaft bestimmt werden kann. Die Name Eigenschaft und die Value 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;
        }
    }
    
  11. Ü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 die HasAttributes Eigenschaft, um zu testen, ob der Knoten Attribute aufweist. Die AttributeCount 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;
        }
    }
    
  12. Speichern Sie die Projektmappe. Erstellen Sie die Projektmappe.

  13. 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:

  1. Klicken Sie auf "Projekt" und dann auf< "ProjectName-Eigenschaften>".

    Notiz

    <ProjectName> ist ein Platzhalter für den Namen des Projekts.

  2. Erweitern Sie konfigurationseigenschaften, und klicken Sie dann auf " Allgemein".

  3. 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.