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. einem Bytestream von einem Server, einer Datei oder einer TextReader Klasse.

Ursprüngliche Produktversion: 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.

Lesen von XML-Daten aus einer URL

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

  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ändige Codeauflistung fortfahren oder die folgenden 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 allen anderen Deklarationen verwenden.

    using System.Xml;
    
  5. Rufen Sie den XML-Stream mithilfe einer URL ab. Streams werden verwendet, um Unabhängigkeit vom Gerät zu gewährleisten. Daher sind Programmänderungen nicht erforderlich, wenn sich die Quelle eines Streams ä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 das folgende Codebeispiel zur Standard-Prozedur der Standardklasse hinzu:

    String URLString = "http://localhost/books.xml";
    
  6. Erstellen Sie eine instance der XmlTextReader -Klasse, und geben Sie die URL an. Wird in der Regel verwendet, XmlTextReader wenn Sie ohne den Mehraufwand eines Dokumentobjektmodells (DOM) als Rohdaten auf den XML-Code zugreifen müssen. XmlTextReader Bietet daher einen schnelleren Mechanismus zum Lesen des XML-Codes. Die XmlTextReader -Klasse verfügt über verschiedene Konstruktoren, um den Speicherort der XML-Daten anzugeben. Der folgende Code erstellt eine instance eines XmlTextReader Objekts und übergibt die URL an den Konstruktor:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Lesen Sie den XML-Code.

    Hinweis

    Dieser Schritt zeigt eine einfache äußere while Schleife, und in den nächsten beiden Schritten wird beschrieben, wie diese Schleife verwendet und XML gelesen wird.

    Nach dem Laden führt sequenzielle Lesevorgänge aus, XmlTextReader um die XML-Daten zu durchlaufen, und verwendet die Read -Methode, um den nächsten Datensatz abzurufen. Die Read Methode gibt false zurück, wenn keine Datensätze mehr 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 von der NodeType -Eigenschaft bestimmt werden kann. Die Name Eigenschaften und Value geben den Knotennamen (element- und attributnamen) und den Knotenwert (den Knotentext) des aktuellen Knotens (oder Datensatzes) zurück. Die NodeType -Enumeration bestimmt den Knotentyp. Im folgenden Beispielcode werden der Name der Elemente und der Dokumenttyp angezeigt.

    Hinweis

    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 ü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("<" + 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 Codeauflistung

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, erhalten Sie möglicherweise die folgende Ausnahmefehlermeldung:

Eine nicht behandelte Ausnahme vom Typ System.Xml. XmlException in system.xml.dll Zusätzliche Informationen: Unerwartete XML-Deklaration. Die XML-Deklaration muss der erste Knoten im Dokument sein, und davor 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 vorangestellt ist.

References