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

In diesem Artikel wird gezeigt, wie Sie die XmlTextReader -Klasse verwenden, um die XML-Daten aus einer Datei zu lesen.

Ursprüngliche Produktversion: Visual C++
Ursprüngliche KB-Nummer: 815658

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie die XmlTextReader -Klasse verwenden, um die XML-Daten aus einer Datei zu lesen. Die XmlTextReader -Klasse ermöglicht die direkte Analyse und Tokenisierung der XML-Daten. Die XmlTextReader -Klasse implementiert zusätzlich zu den Namespaces auch die XML 1.0-Spezifikation in der XML-Spezifikation, die vom World Wide Web Consortium (W3C) definiert wird. In diesem Artikel wird beschrieben, wie Sie einen schnellen, tokenisierten Datenstromzugriff auf die XML-Daten durchführen, anstatt ein Objektmodell wie das XML-Dom (Document Object Model) zu verwenden.

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 Namespace der Microsoft .NET Framework-Klassenbibliothek: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 NamenBooks.xmlverwendet. Sie können eine eigene Books.xml-Datei erstellen oder die Beispieldatei verwenden, die in den Schnellstarts des Microsoft .NET Software Development Kit (SDK) 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.

    Hinweis

    In Visual Studio 2005 wird 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 NameQ815658 ein, und klicken Sie dann auf OK.

  6. Fügen Sie im Projekt einen Verweis auf System.xml.dll hinzu. Weitere Informationen zum Hinzufügen von Verweisen auf ein verwaltetes 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 allen anderen Deklarationen verwenden.

  8. Erstellen Sie eine instance 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 Mehraufwand des DOM auf die XML-Rohdaten zugreifen müssen. Daher bietet die XmlTextReader -Klasse eine schnellere Möglichkeit zum Lesen der XML-Daten. Die XmlTextReader -Klasse weist einen anderen constructors Wert auf, der den Speicherort der XML-Daten angibt.

    Der folgende Code erstellt eine instance der XmlTextReader -Klasse und lädt dann die Books.xml-Datei. Fügen Sie der Funktion den _tmain folgenden Code hinzu:

    XmlTextReader* reader = new XmlTextReader ("books.xml");
    

    Hinweis

    In Visual C++ 2005 wird die _tmain Funktion in die Standard-Funktion geändert.

  9. Lesen sie die XML-Daten.

    Hinweis

    In diesem Schritt wird eine äußere While-Schleife veranschaulicht. Die beiden folgenden Schritte 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 wird weiterhin sequenziell durch die .xml Datei verschoben, 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 von 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, bei dem es sich um den Elementnamen und den Attributnamen handelt.
    • Der Knotenwert, der den Knotentext darstellt.

    Die NodeType -Enumeration bestimmt den Knotentyp. Im folgenden Codebeispiel werden der Name der Elemente und der Dokumenttyp 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. Untersuchen Sie die Attribute.

    Elementknotentypen können eine Liste von Attributknoten enthalten, die den Elementknotentypen zugeordnet sind. Die MovetoNextAttribute -Methode bewegt sich sequenziell durch jedes Attribut im -Element. Verwenden Sie die HasAttributes -Eigenschaft, um zu testen, ob der Knoten über Attribute verfügt. 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 Lösung. Erstellen Sie die Projektmappe.

  13. Drücken Sie STRG+F5, um die Beispielanwendung auszuführen.

Anzeigen der vollständigen Codeauflistung in Visual Studio .NET 2002 oder 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();
}

Hinweis

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 Common Language Runtime-Unterstützungscompileroption in Visual C++ 2005 hinzuzufügen:

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

    Hinweis

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

  2. Erweitern Sie Konfigurationseigenschaften, und klicken Sie dann auf Allgemein.

  3. Klicken Sie auf die Option Common Language Runtime-Unterstützung, Alte Syntax (/clr:oldSyntax) in der Common Language Runtime-Support-Projekteinstellung im rechten Bereich, klicken Sie auf Übernehmen, und klicken Sie dann auf OK.

    Weitere Informationen zur Common Language Runtime-Unterstützungscompiler finden Sie unter /clr (Common Language Runtime-Kompilierung).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 nicht behandelte Ausnahme vom Typ System.Xml. XmlException ist in System.xml.dll Weitere Informationen: Systemfehler aufgetreten.

References

Weitere Informationen zum Lesen von XML mit dem XmlReader finden Sie unter Lesen von XML mit dem XmlReader.