Condividi tramite


Usare Visual C# per leggere dati XML da un URL

Questo articolo illustra come usare la XmlTextReader classe per leggere XML da un URL. Le informazioni trasmesse 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 CODICE XML
  • URL e creazione di un endpoint XML

Questo articolo fa riferimento allo spazio dei nomi System.Xmldella libreria di classi .NET Framework.

Come leggere dati XML da un URL

In questo esempio viene usato un file denominato Books.xml. È possibile creare un file diBooks.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 della sezione Riferimenti di questo articolo per il percorso di download.

  1. Copiare il fileBooks.xml nella cartella del \Inetpub\Wwwroot computer.

  2. Aprire Visual Studio.

  3. Creare una nuova applicazione console Visual C#. È possibile continuare con la sezione Completa elenco di codice o continuare con questi passaggi per compilare l'applicazione.

  4. Specificare la direttiva using nello System.Xml spazio dei nomi in modo che non sia necessario qualificare le XmlTextReader dichiarazioni di classe più avanti nel codice. È necessario usare la direttiva using prima di qualsiasi altra dichiarazione.

    using System.Xml;
    
  5. 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 con XmlTextReader. Aggiungere l'esempio di codice seguente alla routine principale della classe predefinita:

    String URLString = "http://localhost/books.xml";
    
  6. 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 il sovraccarico di un DOM (Document Object Model), pertanto offre XmlTextReader un meccanismo più rapido per la lettura del codice XML. La XmlTextReader classe dispone di costruttori diversi per specificare la posizione dei dati XML. Il codice seguente crea un'istanza di un XmlTextReader oggetto e passa l'URL al costruttore:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Leggere il codice XML.

    Nota

    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 Read metodo per ottenere il record successivo. Il Read metodo restituisce false se non sono presenti altri record.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Esaminare i nodi. Per elaborare i dati XML, ogni record ha un tipo di nodo che può essere determinato dalla NodeType proprietà . Le Name proprietà e Value 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'enumerazione NodeType determina il tipo di nodo. Il codice di esempio seguente visualizza il nome degli elementi e il tipo di documento.

    Nota

    In questo esempio vengono ignorati gli attributi dell'elemento.

    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;
        }
    }
    
  9. Esaminare gli attributi. I tipi di nodi di elemento possono includere un elenco di nodi attributo associati. Il MovetoNextAttribute metodo si sposta in sequenza attraverso ogni attributo nell'elemento . Utilizzare la HasAttributes proprietà per verificare se il nodo dispone di attributi. La AttributeCount 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;
        }
    }
    
  10. Compilare ed eseguire il progetto.

Elenco di 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 messaggio di errore di eccezione seguente:

Eccezione non gestita di tipo System.Xml. XmlException si è verificato in system.xml.dll Informazioni aggiuntive: Dichiarazione XML imprevista. La dichiarazione XML deve essere il primo nodo del documento e non è consentito che vengano visualizzati 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 lo spazio vuoto che precede il primo nodo nel documento Books.xml .

Riferimenti