Använda Visual C# för att läsa XML-data från en URL
Den här artikeln visar hur du använder XmlTextReader
klassen för att läsa XML från en URL. Den strömmade informationen kan komma från alla typer av källor, till exempel en byteström från en server, en fil eller en TextReader
klass.
Ursprunglig produktversion: Visual Studio
Ursprungligt KB-nummer: 307643
Krav
Den här artikeln förutsätter att du är bekant med följande ämnen:
- Microsoft Visual Studio
- XML-terminologi
- Skapa och läsa XML
- URL:er och skapa en XML-slutpunkt
Den här artikeln refererar till namnområdet System.Xml
.NET Framework-klassbibliotek .
Läsa XML-data från en URL
I det här exemplet används en fil med namnet Books.xml. Du kan skapa en egen Books.xml-fil eller använda exempelfilen som ingår i snabbstarterna för .NET Software Development Kit (SDK). Den här filen är också tillgänglig för nedladdning. se det första objektet i avsnittet Referenser i den här artikeln för nedladdningsplatsen.
Kopiera Books.xml-filen till
\Inetpub\Wwwroot
mappen på datorn.Öppna Visual Studio.
Skapa ett nytt Visual C#-konsolprogram. Du kan antingen fortsätta till avsnittet Fullständig kodlista eller fortsätta med de här stegen för att skapa programmet.
Ange användningsdirektivet för
System.Xml
namnområdet så att du inte behöver kvalificeraXmlTextReader
klassdeklarationerna senare i koden. Du måste använda användningsdirektivet före andra deklarationer.using System.Xml;
Hämta XML-dataströmmen med hjälp av en URL. Strömmar används för att ge oberoende från enheten. Därför krävs inte programändringar om källan till en ström ändras. Deklarera en konstant för
http://localhost/books.xml
URL:en. Du använder konstanten i nästa steg medXmlTextReader
. Lägg till följande kodexempel i huvudproceduren för standardklassen:String URLString = "http://localhost/books.xml";
Skapa en instans av
XmlTextReader
klassen och ange URL:en.XmlTextReader
Används vanligtvis om du behöver komma åt XML som rådata utan att behöva använda en dokumentobjektmodell (DOM), vilketXmlTextReader
ger en snabbare mekanism för att läsa XML. KlassenXmlTextReader
har olika konstruktorer för att ange platsen för XML-data. Följande kod skapar en instans av ettXmlTextReader
objekt och skickar URL:en till konstruktorn:XmlTextReader reader = new XmlTextReader (URLString);
Läs igenom XML-koden.
Kommentar
Det här steget visar en grundläggande, yttre
while
loop och de kommande två stegen beskriver hur du använder den loopen och läser XML.När den har lästs
XmlTextReader
in utför du sekventiella läsningar för att flytta över XML-data och använderRead
metoden för att hämta nästa post. MetodenRead
returnerar false om det inte finns några fler poster.while (reader.Read()) { // Do some work here on the data. Console.WriteLine(reader.Name); } Console.ReadLine();
Inspektera noderna. För att bearbeta XML-data har varje post en nodtyp som kan fastställas från egenskapen
NodeType
. EgenskapernaName
ochValue
returnerar nodnamnet (element- och attributnamnen) och nodvärdet (nodtexten) för den aktuella noden (eller posten). UppräkningenNodeType
avgör nodtypen. Följande exempelkod visar namnet på elementen och dokumenttypen.Kommentar
I det här exemplet ignoreras elementattribut.
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; } }
Granska attributen. Elementnodtyper kan innehålla en lista över attributnoder som är associerade med dem. Metoden
MovetoNextAttribute
flyttas sekventiellt genom varje attribut i elementet. Använd egenskapenHasAttributes
för att testa om noden har några attribut. EgenskapenAttributeCount
returnerar antalet attribut för den aktuella noden.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; } }
Skapa och kör projektet.
Fullständig kodlista
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;
}
}
}
}
}
Exempelutdata
<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>
Felsökning
När du testar koden kan följande felmeddelande visas:
Ett ohanterat undantag av typen System.Xml.XmlException inträffade i system.xml.dll Ytterligare information: Oväntad XML-deklaration. XML-deklarationen måste vara den första noden i dokumentet och inga blankstegstecken får visas före den. Linje 1, position 4.
Undantagsfelet inträffar på följande kodrad.
while (reader.Read())
Lös undantagsfelet genom att ta bort det blankstegstecken som föregår den första noden i Books.xml dokumentet.