Leggere i dati XML da un file usando Visual C++

Questo articolo illustra come usare la XmlTextReader classe per leggere i dati XML da un file.

Versione originale del prodotto: Visual C++
Numero KB originale: 815658

Riepilogo

Questo articolo descrive come usare la XmlTextReader classe per leggere i dati XML da un file. La XmlTextReader classe fornisce analisi diretta e tokenizzazione dei dati XML. La XmlTextReader classe implementa anche la specifica XML 1.0, oltre agli spazi dei nomi, nella specifica XML definita dal World Wide Web Consortium (W3C). Questo articolo descrive come eseguire l'accesso rapido e con token ai dati XML anziché usare un modello a oggetti, ad esempio il DOM (Document Object Model) XML.

Per una versione .NET di Microsoft Visual C# di questo articolo, vedere Come leggere XML da un file usando Visual C#.

Questo articolo fa riferimento allo spazio dei nomi della libreria di classi di Microsoft .NET Framework seguente: System.xml

Requisiti

Questo articolo presuppone che si abbia familiarità con gli argomenti seguenti:

  • Terminologia XML
  • Come creare e leggere un file XML

L'elenco seguente descrive l'hardware, il software, l'infrastruttura di rete e i Service Pack consigliati necessari:

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

Leggere i dati XML da un file

Nell'esempio in questo articolo viene usato un file denominato Books.xml. È possibile creare un file di Books.xml personalizzato oppure usare il file di esempio incluso nelle guide introduttive di Microsoft .NET Software Development Kit (SDK). È necessario copiare il file Books.xml nella cartella del progetto.

Per leggere i dati XML da un file, seguire questa procedura:

  1. Avviare Visual Studio .NET 2002, Visual Studio .NET 2003 o Visual Studio 2005.

  2. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto .

  3. In Tipi di progetto fare clic su Progetti Visual C++.

    Nota

    In Visual Studio 2005 i progetti di Visual C++ vengono modificati in Visual C++.

  4. In Modelli fare clic su Applicazione C++ gestita se si usa Visual Studio .NET 2002.

    In Modelli fare clic su Applicazione console (.NET) se si usa Visual Studio .NET 2003.

    In Modelli fare clic su Applicazione console CLR se si usa Visual Studio 2005.

  5. Nella casella Nome digitare Q815658 e quindi fare clic su OK.

  6. Aggiungere un riferimento a System.xml.dll nel progetto. Per altre informazioni su come aggiungere riferimenti a un progetto gestito di Visual C++, vedere Aggiungere riferimenti a un progetto gestito di Visual C++

  7. Specificare la direttiva using nello spazio dei System::Xml nomi come indicato di seguito:

    using namespace System::Xml;
    

    Questa operazione viene eseguita in modo da non dover qualificare le XmlTextReader dichiarazioni di classe più avanti nel codice. È necessario usare la direttiva using prima di qualsiasi altra dichiarazione.

  8. Creare un'istanza dell'oggetto XmlTextReader . Popolare l'oggetto XmlTextReader con il file .xml.

    In genere, la XmlTextReader classe viene usata se è necessario accedere ai dati XML non elaborati senza il sovraccarico del DOM. Di conseguenza, la XmlTextReader classe offre un modo più rapido per leggere i dati XML. La XmlTextReader classe ha valori diversi constructors che specificano il percorso dei dati XML.

    Il codice seguente crea un'istanza della XmlTextReader classe e quindi carica il file Books.xml . Aggiungere il codice seguente alla _tmain funzione:

    XmlTextReader* reader = new XmlTextReader ("books.xml");
    

    Nota

    In Visual C++ 2005 la _tmain funzione viene modificata in funzione principale.

  9. Leggere i dati XML.

    Nota

    Questo passaggio illustra un ciclo while esterno. I due passaggi che seguono questo passaggio illustrano come usare il ciclo while per leggere i dati XML.

    Dopo aver creato l'oggetto XmlTextReader , utilizzare il metodo Read per leggere i dati XML.

    Il metodo Read continua a spostarsi sequenzialmente nel file .xml fino a quando il metodo Read non raggiunge la fine del file. Quando il metodo Read raggiunge la fine del file, il metodo Read restituisce false.

    while (reader->Read())
    {
        // Do some work here on the data.
        Console::WriteLine(reader->Name);
    }
    
  10. Esaminare i nodi.

    Per elaborare i dati XML, ogni record ha un tipo di nodo che può essere determinato dalla NodeType proprietà . La Name proprietà e la Value proprietà restituiscono le informazioni seguenti per il nodo corrente o per il record corrente:

    • Nome del nodo che corrisponde al nome dell'elemento e al nome dell'attributo.
    • Valore del nodo che rappresenta il testo del nodo.

    L'enumerazione NodeType determina il tipo di nodo. Nell'esempio di codice seguente vengono visualizzati il nome degli elementi e il tipo di documento. L'esempio di codice seguente ignora gli attributi degli elementi:

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", 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("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  11. Esaminare gli attributi.

    I tipi di nodo di elemento possono includere un elenco di nodi attributo associati ai tipi di nodo elemento. Il MovetoNextAttribute metodo si sposta in sequenza tra 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("<{0}", reader->Name);
    
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                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("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  12. Salvare la soluzione. Compilare la soluzione.

  13. Premere CTRL+F5 per eseguire l'applicazione di esempio.

Visualizzare il listato di codice completo in Visual Studio .NET 2002 o in Visual Studio .NET 2003

#include "stdafx.h"
#include <tchar.h>

#using <mscorlib.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Xml;

void _tmain(void)
{
    XmlTextReader* reader = new XmlTextReader ("books.xml");

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
  
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                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("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    Console::ReadLine();
}

Nota

È necessario aggiungere l'opzione del compilatore di supporto di Common Language Runtime (/clr:oldSyntax) in Visual C++ 2005 per compilare correttamente l'esempio di codice precedente. Per aggiungere l'opzione del compilatore di supporto di Common Language Runtime in Visual C++ 2005, seguire questa procedura:

  1. Fare clic su Progetto e quindi su <Proprietà NomeProgetto> .

    Nota

    <ProjectName> è un segnaposto per il nome del progetto.

  2. Espandere Proprietà di configurazione e quindi fare clic su Generale.

  3. Fare clic per selezionare Supporto di Common Language Runtime, sintassi precedente (/clr:oldSyntax) nell'impostazione del progetto di supporto di Common Language Runtime nel riquadro destro, fare clic su Applica e quindi su OK.

    Per altre informazioni sull'opzione del compilatore di supporto di Common Language Runtime, vedere /clr (Compilazione Common Language Runtime).

Questi passaggi si applicano all'intero articolo.

Visualizzare l'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 esegue l'applicazione di esempio, è possibile che venga visualizzato il messaggio di errore seguente:

Eccezione non gestita di tipo System.Xml. XmlException si è verificato in System.xml.dll Informazioni aggiuntive: Errore di sistema.

Riferimenti

Per altre informazioni sulla lettura di XML con XmlReader, vedere Lettura di XML con XmlReader.