Condividi tramite


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 e tokening diretti 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 tokenizzato ai dati XML anziché usare un modello a oggetti, ad esempio il MODELLO 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 microsoft .NET Framework seguente: System.xml

Requisiti

Questo articolo presuppone che l'utente abbia familiarità con gli argomenti seguenti:

  • Terminologia XML
  • Come creare e come leggere un file XML

L'elenco seguente illustra i service pack consigliati per hardware, software, infrastruttura di rete e Service Pack necessari:

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

Leggere i dati XML da un file

Nell'esempio di 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 Filee quindi fare clic su Progetto.

    Verrà visualizzata la finestra di dialogo Nuovo progetto .

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

    Note

    In Visual Studio 2005 i progetti Visual C++ sono stati 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 Visual C++ gestito, vedere Aggiungere riferimenti a un progetto Visual C++ gestito

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

    using namespace System::Xml;
    

    A tale scopo, non è necessario qualificare le dichiarazioni di XmlTextReader classe più avanti nel codice. È necessario utilizzare 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. Pertanto, la XmlTextReader classe offre un modo più rapido per leggere i dati XML. La XmlTextReader classe ha un valore diverso constructors che specifica 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 funzione _tmain:

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

    Note

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

  9. Leggere i dati XML.

    Note

    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 in sequenza 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 elemento possono includere un elenco di nodi attributo associati ai tipi di nodo dell'elemento. 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("<{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 l'elenco 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();
}

Note

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

  1. Fare clic su Progettoe quindi su< Proprietà NomeProgetto>.

    Note

    <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 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 fare clic su OK.

    Per altre informazioni sull'opzione del compilatore di supporto di Common Language Runtime, vedere /clr (compilazione Common Language Runtime).For more information about the Common Language Runtime support compiler option, see /clr (Common Language Runtime Compilation).

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

Eccezione non gestita di tipo System.Xml.XmlException 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.