Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leest u hoe u de XmlTextReader klasse gebruikt om XML uit een URL te lezen. De gestreamde informatie kan afkomstig zijn van allerlei soorten bronnen, zoals een bytestroom van een server, een bestand of een TextReader klasse.
Oorspronkelijke productversie: Visual Studio
Oorspronkelijk KB-nummer: 307643
Behoeften
In dit artikel wordt ervan uitgegaan dat u bekend bent met de volgende onderwerpen:
- Microsoft Visual Studio
- XML-terminologie
- XML maken en lezen
- URL's en het maken van een XML-eindpunt
Dit artikel verwijst naar de .NET Framework Class Library-naamruimte System.Xml.
XML-gegevens lezen uit een URL
In dit voorbeeld wordt een bestand met de naam Books.xml gebruikt. U kunt uw eigen Books.xml-bestand maken of het voorbeeldbestand gebruiken dat is opgenomen in de QuickStarts van de .NET Software Development Kit (SDK). Dit bestand is ook beschikbaar om te downloaden; raadpleeg het eerste item in de sectie Verwijzingen van dit artikel voor de downloadlocatie.
Kopieer het Books.xml bestand naar de
\Inetpub\Wwwrootmap op uw computer.Open Visual Studio.
Maak een nieuwe Visual C#-consoletoepassing. U kunt doorgaan naar de sectie Volledige codevermelding of doorgaan met deze stappen om de toepassing te bouwen.
Geef de using-instructie op voor de
System.Xmlnaamruimte, zodat u deXmlTextReaderklassedeclaraties later in uw code niet hoeft te kwalificeren. U moet de using-instructie gebruiken vóór andere declaraties.using System.Xml;Haal de XML-stream op met behulp van een URL. Streams worden gebruikt om onafhankelijkheid van het apparaat te bieden; Programmawijzigingen zijn dus niet vereist als de bron van een stream verandert. Declareer een constante voor de
http://localhost/books.xmlURL. U gebruikt de constante in de volgende stap metXmlTextReader. Voeg het volgende codevoorbeeld toe aan de hoofdprocedure van de standaardklasse:String URLString = "http://localhost/books.xml";Maak een exemplaar van de
XmlTextReaderklasse en geef de URL op.XmlTextReaderNormaal gesproken wordt gebruikt als u toegang nodig hebt tot de XML als onbewerkte gegevens zonder de overhead van een Document Object Model (DOM).XmlTextReaderDit biedt dus een sneller mechanisme voor het lezen van de XML. DeXmlTextReaderklasse heeft verschillende constructors om de locatie van de XML-gegevens op te geven. Met de volgende code wordt een exemplaar van eenXmlTextReaderobject gemaakt en wordt de URL doorgegeven aan de constructor:XmlTextReader reader = new XmlTextReader (URLString);Lees de XML.
Notitie
Deze stap toont een eenvoudige, buitenste
whilelus en de volgende twee stappen beschrijven hoe u die lus gebruikt en XML leest.Nadat deze is geladen,
XmlTextReadervoert u sequentiële leesbewerkingen uit om door de XML-gegevens te lopen en gebruikt u deReadmethode om de volgende record te verkrijgen. DeReadmethode retourneert onwaar als er geen records meer zijn.while (reader.Read()) { // Do some work here on the data. Console.WriteLine(reader.Name); } Console.ReadLine();Inspecteer de knooppunten. Voor het verwerken van de XML-gegevens heeft elke record een knooppunttype dat kan worden bepaald op basis van de
NodeTypeeigenschap. DeNameenValueeigenschappen retourneren de naam van het knooppunt (het element en de kenmerknamen) en de knooppuntwaarde (de knooppunttekst) van het huidige knooppunt (of record). DeNodeTypeopsomming bepaalt het knooppunttype. In de volgende voorbeeldcode wordt de naam van de elementen en het documenttype weergegeven.Notitie
In dit voorbeeld worden elementkenmerken genegeerd.
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; } }Inspecteer de kenmerken. Elementknooppunttypen kunnen een lijst met kenmerkknooppunten bevatten die eraan zijn gekoppeld. De
MovetoNextAttributemethode wordt opeenvolgend door elk kenmerk in het element verplaatst. Gebruik deHasAttributeseigenschap om te testen of het knooppunt kenmerken heeft. DeAttributeCounteigenschap retourneert het aantal kenmerken voor het huidige knooppunt.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; } }Bouw uw project en voer het uit.
Volledige codevermelding
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;
}
}
}
}
}
Voorbeelduitvoer
<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>
Probleemoplossing
Wanneer u de code test, wordt mogelijk het volgende uitzonderingsfoutbericht weergegeven:
Er is een niet-verwerkte uitzondering van het type System.Xml.XmlException opgetreden in system.xml.dll Aanvullende informatie: Onverwachte XML-declaratie. De XML-declaratie moet het eerste knooppunt in het document zijn en er mogen geen spatietekens worden weergegeven voordat het wordt weergegeven. Lijn 1, positie 4.
De uitzonderingsfout treedt op op de volgende coderegel.
while (reader.Read())
Als u de uitzonderingsfout wilt oplossen, verwijdert u het spatieteken dat voorafgaat aan het eerste knooppunt in het Books.xml document.