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

In diesem Artikel wird gezeigt, wie Sie die XmlTextReader Klasse zum Lesen der XML-Daten aus einer Datei verwenden.

Originalversion des Produkts:   Visual C++
Ursprüngliche KB-Nummer:   815658

Zusammenfassung

In diesem Artikel wird beschrieben, wie Die Klasse zum Lesen der XML-Daten aus einer Datei verwendet XmlTextReader wird. Die XmlTextReader Klasse bietet eine direkte Analyse und Tokenisierung der XML-Daten. Die XmlTextReader Klasse implementiert zusätzlich zu den Namespaces auch die XML 1.0-Spezifikation in der VOM World Wide Web Consortium (W3C) definierten XML-Spezifikation. In diesem Artikel wird beschrieben, wie Sie schnellen, tokenisierten Datenstromzugriff auf die XML-Daten durchführen, anstatt ein Objektmodell wie das XML-Dom (Document Object Model) zu verwenden.This article describes how to do fast, tokenized stream access to the XML data instead of using an object model, such as the XML Document Object Model (DOM).

Eine Microsoft Visual C# .NET-Version dieses Artikels finden Sie unter So wird's gemacht: 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

Das Beispiel in diesem Artikel verwendet eine Datei mit dem Namen Books.xml. 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 Project Typen 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 "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 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;
    

    Sie tun dies, 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 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 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 Speicherort auf, der den Speicherort der XML-Daten angibt.

    Der folgende Code erstellt eine Instanz 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 Hauptfunktion geändert.

  9. Lesen Sie die XML-Daten.

    Hinweis

    In diesem Schritt wird eine äußere While-Schleife veranschaulicht. Die beiden Schritte, die diesem Schritt folgen, veranschaulichen, wie die While-Schleife zum Lesen der XML-Daten verwendet wird.

    Verwenden Sie nach dem Erstellen des XmlTextReader Objekts 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 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 dem Elementnamen und dem Attributnamen entspricht.
    • Der Knotenwert, bei dem es sich um den Knotentext handelt.

    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. Überprüfen Sie die Attribute.

    Elementknotentypen können eine Liste von Attributknoten enthalten, die den Elementknotentypen zugeordnet sind. Die MovetoNextAttribute Methode wird sequenziell durch jedes Attribut im Element verschoben. 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 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 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();
}

Hinweis

Sie müssen die Common Language Runtime Support Compiler Option (/clr:oldSyntax) in Visual C++ 2005 hinzufügen, um das vorherige Codebeispiel erfolgreich kompilieren zu können. Führen Sie die folgenden Schritte aus, um die Common Language Runtime-Unterstützungscompileroption in Visual C++ 2005 hinzuzufügen:

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

    Hinweis

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

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

  3. Klicken Sie im rechten Bereich in der Projekteinstellung "Common Language Runtime Support**" auf "Common Language Runtime Support" (/clr:oldSyntax), um "Common Language Runtime Support, Old Syntax" (/clr:oldSyntax)** auszuwählen, und klicken Sie dann auf "OK".

    Weitere Informationen zur Common Language Runtime-Unterstützungscompileroption finden Sie unter /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 in System.xml.dll Zusätzliche Informationen: Systemfehler.

References

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