Verwenden von Visual C# zum Lesen von XML-Daten aus einer URL
In diesem Artikel wird gezeigt, wie Sie die XmlTextReader Klasse zum Lesen von XML aus einer URL verwenden. Die gestreamten Informationen können aus 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 KlassenbibliotheksnamespaceSystem.Xml.
So wird's gemacht: Lesen von XML-Daten aus einer URL
In diesem Beispiel wird eine Datei mit dem Namen 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; informationen zum Downloadspeicherort finden Sie im ersten Element im Abschnitt "Verweise " dieses Artikels.
Kopieren Sie die Books.xml Datei in den
\Inetpub\WwwrootOrdner auf Ihrem Computer.Öffnen Sie Visual Studio.
Erstellen Sie eine neue Visual C#-Konsolenanwendung. Sie können entweder mit dem Abschnitt " Vollständiger Codeeintrag " fortfahren oder die folgenden Schritte ausführen, um die Anwendung zu erstellen.
Geben Sie die using-Direktive für den
System.XmlNamespace an, damit Sie dieXmlTextReaderKlassendeklarationen später im Code nicht qualifizieren müssen. Sie müssen die using-Direktive vor allen anderen Deklarationen verwenden.using System.Xml;Rufen Sie den XML-Datenstrom mithilfe einer URL ab. Streams werden verwendet, um die Unabhängigkeit vom Gerät zu gewährleisten. Programmänderungen sind daher nicht erforderlich, wenn sich die Quelle eines Datenstroms ändert. Deklarieren Sie eine Konstante für die
http://localhost/books.xmlURL. Sie verwenden die Konstante im nächsten Schritt mitXmlTextReader. Fügen Sie der Hauptprozedur der Standardklasse das folgende Codebeispiel hinzu:String URLString = "http://localhost/books.xml";Erstellen Sie eine Instanz der
XmlTextReaderKlasse, und geben Sie die URL an. Wird in der Regel verwendet,XmlTextReaderwenn Sie ohne den Aufwand eines Doms (Document Object Model) als Rohdaten auf xml zugreifen müssen.XmlTextReaderDadurch wird ein schnellerer Mechanismus zum Lesen des XML bereitgestellt. DieXmlTextReaderKlasse verfügt über unterschiedliche Konstruktoren, um den Speicherort der XML-Daten anzugeben. Der folgende Code erstellt eine Instanz einesXmlTextReaderObjekts und übergibt die URL an den Konstruktor:XmlTextReader reader = new XmlTextReader (URLString);Lesen Sie den XML-Code durch.
Hinweis
In diesem Schritt wird eine einfache äußere
whileSchleife gezeigt, und in den nächsten beiden Schritten wird die Verwendung dieser Schleife und das Lesen von XML beschrieben.Nachdem sie geladen wurde, werden sequenzielle Lesevorgänge ausgeführt,
XmlTextReaderum die XML-Daten zu durchlaufen, und verwendet dieReadMethode, um den nächsten Datensatz abzurufen. DieReadMethode 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();Überprüfen Sie die Knoten. Zum Verarbeiten der XML-Daten verfügt jeder Datensatz über einen Knotentyp, der anhand der
NodeTypeEigenschaft bestimmt werden kann. DieNameEigenschaften gebenValueden Knotennamen (die Element- und Attributnamen) und den Knotenwert (den Knotentext) des aktuellen Knotens (oder Datensatzes) zurück. DieNodeTypeEnumeration 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; } }Überprüfen Sie die Attribute. Elementknotentypen können eine Liste von Attributknoten enthalten, die ihnen zugeordnet sind. Die
MovetoNextAttributeMethode wird sequenziell durch jedes Attribut im Element verschoben. Verwenden Sie dieHasAttributesEigenschaft, um zu testen, ob der Knoten Attribute aufweist. DieAttributeCountEigenschaft 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; } }Erstellen und ausführen Sie Ihr Projekt.
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, wird möglicherweise die folgende Ausnahmefehlermeldung angezeigt:
Eine unbehandelte 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 es dürfen keine Leerzeichen vor dem Dokument 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 vorangeht.