Usare Visual C# per leggere i dati XML da un URL
Questo articolo illustra come usare la XmlTextReader
classe per leggere XML da un URL. Le informazioni trasmessi possono provenire da tutti i tipi di origini, ad esempio un flusso di byte da un server, un file o una TextReader
classe.
Versione originale del prodotto: Visual Studio
Numero KB originale: 307643
Requisiti
Questo articolo presuppone che si abbia familiarità con gli argomenti seguenti:
- Microsoft Visual Studio
- Terminologia XML
- Creazione e lettura di XML
- URL e creazione di un endpoint XML
Questo articolo fa riferimento allo spazio dei nomi System.Xml
della libreria di classi .NET Framework .
Come leggere i dati XML da un URL
In questo esempio viene usato un file denominato Books.xml. È possibile creare un file di Books.xml personalizzato o usare il file di esempio incluso nelle guide introduttive di .NET Software Development Kit (SDK). Questo file è disponibile anche per il download; fare riferimento al primo elemento nella sezione Riferimenti di questo articolo per il percorso di download.
Copiare il file Books.xml nella
\Inetpub\Wwwroot
cartella del computer.Aprire Visual Studio.
Creare una nuova applicazione console Visual C#. È possibile continuare con la sezione Elenco di codice completo o continuare con questi passaggi per compilare l'applicazione.
Specificare la direttiva using nello
System.Xml
spazio dei nomi in modo che non sia necessario qualificare le dichiarazioni diXmlTextReader
classe in un secondo momento nel codice. È necessario utilizzare la direttiva using prima di qualsiasi altra dichiarazione.using System.Xml;
Recuperare il flusso XML tramite un URL. I flussi vengono usati per garantire l'indipendenza dal dispositivo; pertanto, le modifiche al programma non sono necessarie se l'origine di un flusso cambia. Dichiarare una costante per l'URL
http://localhost/books.xml
. La costante verrà usata nel passaggio successivo conXmlTextReader
. Aggiungere l'esempio di codice seguente alla procedura principale della classe predefinita:String URLString = "http://localhost/books.xml";
Creare un'istanza della
XmlTextReader
classe e specificare l'URL. In genere,XmlTextReader
viene usato se è necessario accedere al codice XML come dati non elaborati senza l'overhead di un DOM (Document Object Model), pertanto fornisceXmlTextReader
un meccanismo più rapido per la lettura del codice XML. LaXmlTextReader
classe dispone di costruttori diversi per specificare il percorso dei dati XML. Il codice seguente crea un'istanza di unXmlTextReader
oggetto e passa l'URL al costruttore:XmlTextReader reader = new XmlTextReader (URLString);
Leggere il codice XML.
Note
Questo passaggio illustra un ciclo esterno
while
di base e i due passaggi successivi descrivono come usare tale ciclo e leggere XML.Dopo il caricamento,
XmlTextReader
esegue letture sequenziali per spostarsi tra i dati XML e usa il metodo per ottenere ilRead
record successivo. IlRead
metodo restituisce false se non sono presenti più record.while (reader.Read()) { // Do some work here on the data. Console.WriteLine(reader.Name); } Console.ReadLine();
Esaminare i nodi. Per elaborare i dati XML, ogni record ha un tipo di nodo che può essere determinato dalla
NodeType
proprietà . LeName
proprietà eValue
restituiscono il nome del nodo (i nomi degli elementi e degli attributi) e il valore del nodo (il testo del nodo) del nodo corrente (o record). L'enumerazioneNodeType
determina il tipo di nodo. Il codice di esempio seguente visualizza il nome degli elementi e il tipo di documento.Note
In questo esempio vengono ignorati gli attributi degli elementi.
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; } }
Esaminare gli attributi. I tipi di nodo di elemento possono includere un elenco di nodi di attributo associati. Il
MovetoNextAttribute
metodo si sposta in sequenza attraverso ogni attributo nell'elemento . Usare laHasAttributes
proprietà per verificare se il nodo dispone di attributi. LaAttributeCount
proprietà restituisce il numero di attributi per il nodo corrente.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; } }
Compilare ed eseguire il progetto.
Elenco codice completo
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;
}
}
}
}
}
Output di esempio
<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>
Risoluzione dei problemi
Quando si testa il codice, è possibile che venga visualizzato il seguente messaggio di errore di eccezione:
Eccezione non gestita di tipo System.Xml.XmlException in system.xml.dll Informazioni aggiuntive: Dichiarazione XML imprevista. La dichiarazione XML deve essere il primo nodo del documento e non sono consentiti spazi vuoti prima di esso. Riga 1, posizione 4.
L'errore di eccezione si verifica nella riga di codice seguente.
while (reader.Read())
Per risolvere l'errore di eccezione, rimuovere il carattere di spazio vuoto che precede il primo nodo del documento Books.xml .