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.
Kopieren Sie die Books.xml-Datei in den
\Inetpub\Wwwroot
Ordner auf Ihrem Computer.Öffnen Sie Visual Studio.
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.
Geben Sie die using-Direktive für den
System.Xml
Namespace an, damit Sie dieXmlTextReader
Klassendeklarationen 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-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 mitXmlTextReader
. Fügen Sie das folgende Codebeispiel zur Standard-Prozedur der Standardklasse hinzu:String URLString = "http://localhost/books.xml";
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. DieXmlTextReader
-Klasse verfügt über verschiedene Konstruktoren, um den Speicherort der XML-Daten anzugeben. Der folgende Code erstellt eine instance einesXmlTextReader
Objekts und übergibt die URL an den Konstruktor:XmlTextReader reader = new XmlTextReader (URLString);
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 dieRead
-Methode, um den nächsten Datensatz abzurufen. DieRead
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();
Ü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. DieName
Eigenschaften undValue
geben den Knotennamen (element- und attributnamen) und den Knotenwert (den Knotentext) des aktuellen Knotens (oder Datensatzes) zurück. DieNodeType
-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; } }
Ü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 dieHasAttributes
-Eigenschaft, um zu testen, ob der Knoten über Attribute verfügt. DieAttributeCount
-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; } }
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für