Freigeben über


Verwenden von Visual C# zum Lesen von XML-Daten aus einer URL

In diesem Artikel erfahren Sie, wie Sie die XmlTextReader Klasse verwenden, um XML aus einer URL zu lesen. Die gestreamten Informationen können aus allen Arten von Quellen stammen, z. B. aus einem Bytedatenstrom von einem Server, einer Datei oder einer TextReader Klasse.

Originalproduktversion: Visual Studio
Ursprüngliche KB-Nummer: 307643

Anforderungen

In diesem Artikel wird davon ausgegangen, dass Sie mit den folgenden Themen vertraut sind:

  • Microsoft Visual Studio
  • XML-Terminologie
  • Erstellen und Lesen von XML
  • URLs und Erstellen eines XML-Endpunkts

Dieser Artikel bezieht sich auf den .NET Framework-Klassenbibliotheksnamespace System.Xml.

So lesen Sie XML-Daten aus einer URL

In diesem Beispiel wird eine Datei namens Books.xml verwendet. Sie können eine eigene Books.xml-Datei erstellen oder die Beispieldatei verwenden, die in den .NET Software Development Kit (SDK)-Schnellstarts enthalten ist. Diese Datei steht auch zum Download zur Verfügung; verweisen Sie auf das erste Element im Abschnitt "Verweise " dieses Artikels für den Downloadspeicherort.

  1. Kopieren Sie die Books.xml Datei in den \Inetpub\Wwwroot Ordner auf Ihrem Computer.

  2. Öffnen Sie Visual Studio.

  3. Erstellen Sie eine neue Visual C#-Konsolenanwendung. Sie können entweder mit dem Abschnitt "Vollständiger Codeauflistung " fortfahren oder diese Schritte ausführen, um die Anwendung zu erstellen.

  4. Geben Sie die using-Direktive für den System.Xml Namespace an, damit Sie die XmlTextReader Klassendeklarationen später im Code nicht qualifizieren müssen. Sie müssen die using-Direktive vor anderen Deklarationen verwenden.

    using System.Xml;
    
  5. Rufen Sie den XML-Datenstrom mithilfe einer URL ab. Datenströme werden verwendet, um Unabhängigkeit vom Gerät zu gewährleisten; Daher sind Programmänderungen nicht erforderlich, wenn sich die Quelle eines Datenstroms ändert. Deklarieren Sie eine Konstante für die http://localhost/books.xml URL. Sie verwenden die Konstante im nächsten Schritt mit XmlTextReader. Fügen Sie der Hauptprozedur der Standardklasse das folgende Codebeispiel hinzu:

    String URLString = "http://localhost/books.xml";
    
  6. Erstellen Sie eine Instanz der XmlTextReader Klasse, und geben Sie die URL an. Wird in der Regel verwendet, XmlTextReader wenn Sie auf den XML-Code als Rohdaten zugreifen müssen, ohne den Aufwand für ein Dokumentobjektmodell (Document Object Model, XmlTextReader DOM) zu verwenden. Dadurch wird ein schnellerer Mechanismus zum Lesen des XML-Codes bereitgestellt. Die XmlTextReader Klasse weist unterschiedliche Konstruktoren auf, um den Speicherort der XML-Daten anzugeben. Der folgende Code erstellt eine Instanz eines XmlTextReader Objekts und übergibt die URL an den Konstruktor:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Lesen Sie die XML-Datei.

    Notiz

    In diesem Schritt wird eine einfache, äußere while Schleife und die nächsten beiden Schritte beschrieben, wie sie diese Schleife verwenden und XML lesen.

    Nachdem es geladen wurde, führt sequenzielle Lesevorgänge durch, XmlTextReader um über die XML-Daten zu wechseln, und verwendet die Read Methode zum Abrufen des nächsten Datensatzes. Die Read Methode gibt "false" zurück, wenn keine weiteren Datensätze vorhanden sind.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Überprüfen 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 Eigenschaften Value geben den Knotennamen (Element- und Attributnamen) und den Knotenwert (den Knotentext) des aktuellen Knotens (oder Datensatz) zurück. Die NodeType Enumeration bestimmt den Knotentyp. Im folgenden Beispielcode werden der Name der Elemente und des Dokumenttyps angezeigt.

    Notiz

    In diesem Beispiel werden Elementattribute ignoriert.

    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + 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("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  9. Überprüfen Sie die Attribute. Elementknotentypen können eine Liste von Attributknoten enthalten, die ihnen 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("<" + reader.Name);
    
                while (reader.MoveToNextAttribute()) // Read the attributes.
                    Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                Console.Write(">");
                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("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  10. Erstellen Sie Ihr Projekt, und führen Sie es aus.

Vollständige Codeliste

using System;
using System.Xml;

namespace ReadXMLfromURL
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            String URLString = "http://localhost/books.xml";
            XmlTextReader reader = new XmlTextReader (URLString);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Read the attributes.
                            Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                        Console.Write(">");
                        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("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
        }
    }
}

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 den Code testen, wird möglicherweise die folgende Ausnahmefehlermeldung angezeigt:

Eine unbehandelte Ausnahme vom Typ "System.Xml.XmlException" ist in system.xml.dll Zusätzliche Informationen aufgetreten: Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten im Dokument sein, und vor dem Dokument dürfen keine Leerzeichen angezeigt werden. Zeile 1, Position 4.

Der Ausnahmefehler tritt in der folgenden Codezeile auf.

while (reader.Read())

Um den Ausnahmefehler zu beheben, entfernen Sie das Leerzeichen, das dem ersten Knoten im Books.xml Dokument vorausgeht.

References