Condividi tramite


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.Xmldella 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.

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

  2. Aprire Visual Studio.

  3. 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.

  4. Specificare la direttiva using nello System.Xml spazio dei nomi in modo che non sia necessario qualificare le dichiarazioni di XmlTextReader classe in un secondo momento nel codice. È necessario utilizzare 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 procedura 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 l'overhead di un DOM (Document Object Model), pertanto fornisce XmlTextReader un meccanismo più rapido per la lettura del codice XML. La XmlTextReader classe dispone di costruttori diversi per specificare il percorso 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.

    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 il Read record successivo. Il Read 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();
    
  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.

    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;
        }
    }
    
  9. 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 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 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 .

Riferimenti