Partager via


Lire les données XML à partir d’un fichier à l’aide de Visual C++

Cet article montre comment utiliser la XmlTextReader classe pour lire les données XML à partir d’un fichier.

Version du produit d’origine : Visual C++
Numéro de base de connaissances d’origine : 815658

Résumé

Cet article explique comment utiliser la XmlTextReader classe pour lire les données XML à partir d’un fichier. La XmlTextReader classe fournit l’analyse directe et le jeton des données XML. La XmlTextReader classe implémente également la spécification XML 1.0, en plus des espaces de noms, dans la spécification XML définie par le World Wide Web Consortium (W3C). Cet article explique comment effectuer un accès rapide en flux tokenisé aux données XML au lieu d’utiliser un modèle objet, tel que le modèle DOM (Document Object Model).

Pour obtenir une version Microsoft Visual C# .NET de cet article, consultez Comment lire du code XML à partir d’un fichier à l’aide de Visual C#.

Cet article fait référence à l’espace de noms microsoft .NET Framework Class Library suivant : System.xml

Spécifications

Cet article suppose que vous êtes familiarisé avec les rubriques suivantes :

  • Terminologie XML
  • Comment créer et lire un fichier XML

La liste suivante décrit le matériel, les logiciels, l’infrastructure réseau et les service packs recommandés dont vous avez besoin :

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

Lire les données XML à partir d’un fichier

L’exemple de cet article utilise un fichier nommé Books.xml. Vous pouvez créer votre propre fichier Books.xml, ou vous pouvez utiliser l’exemple de fichier inclus dans les guides de démarrage rapide du Kit de développement logiciel (SDK) Microsoft .NET. Vous devez copier le fichier Books.xml dans le dossier du projet.

Pour lire les données XML à partir d’un fichier, procédez comme suit :

  1. Démarrez Visual Studio .NET 2002, Visual Studio .NET 2003 ou Visual Studio 2005.

  2. Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.

    La boîte de dialogue Nouveau projet apparaît.

  3. Sous Types de projets, cliquez sur Projets Visual C++.

    Note

    Dans Visual Studio 2005, les projets Visual C++ sont remplacés par Visual C++.

  4. Sous Modèles, cliquez sur Application C++ managée si vous utilisez Visual Studio .NET 2002.

    Sous Modèles, cliquez sur Application console (.NET) si vous utilisez Visual Studio .NET 2003.

    Sous Modèles, cliquez sur Application console CLR si vous utilisez Visual Studio 2005.

  5. Dans la zone Nom , tapez Q815658, puis cliquez sur OK.

  6. Ajoutez une référence au System.xml.dll projet. Pour plus d’informations sur l’ajout de références à un projet Visual C++ managé, consultez Ajouter des références à un projet Visual C++ managé

  7. Spécifiez la directive using dans l’espace System::Xml de noms comme suit :

    using namespace System::Xml;
    

    Pour ce faire, vous n’avez pas besoin de qualifier les XmlTextReader déclarations de classe plus loin dans votre code. Vous devez utiliser la directive using avant toute autre déclaration.

  8. Créez une instance de l’objet XmlTextReader . Remplissez l’objet XmlTextReader avec le fichier .xml.

    En règle générale, la XmlTextReader classe est utilisée si vous devez accéder aux données XML brutes sans surcharge du DOM. Par conséquent, la XmlTextReader classe offre un moyen plus rapide de lire les données XML. La XmlTextReader classe a des différences constructors qui spécifient l’emplacement des données XML.

    Le code suivant crée une instance de la XmlTextReader classe, puis charge le fichier Books.xml . Ajoutez le code suivant à la fonction _tmain :

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

    Note

    Dans Visual C++ 2005, la _tmain fonction est remplacée par la fonction principale.

  9. Lisez les données XML.

    Note

    Cette étape illustre une boucle while externe. Les deux étapes qui suivent cette étape montrent comment utiliser la boucle while pour lire les données XML.

    Après avoir créé l’objet XmlTextReader , utilisez la méthode Read pour lire les données XML.

    La méthode Read continue de passer séquentiellement dans le fichier .xml jusqu’à ce que la méthode Read atteigne la fin du fichier. Lorsque la méthode Read atteint la fin du fichier, la méthode Read retourne false.

    while (reader->Read())
    {
        // Do some work here on the data.
        Console::WriteLine(reader->Name);
    }
    
  10. Examinez les nœuds.

    Pour traiter les données XML, chaque enregistrement a un type de nœud qui peut être déterminé à partir de la NodeType propriété. La Name propriété et la Value propriété retournent les informations suivantes pour le nœud actif ou pour l’enregistrement actif :

    • Nom du nœud qui est le nom de l’élément et le nom de l’attribut.
    • Valeur du nœud qui est le texte du nœud.

    L’énumération NodeType détermine le type de nœud. L’exemple de code suivant affiche le nom des éléments et le type de document. L’exemple de code suivant ignore les attributs d’élément :

    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. Examinez les attributs.

    Les types de nœuds d’élément peuvent inclure une liste de nœuds d’attribut associés aux types de nœuds d’élément. La MovetoNextAttribute méthode passe séquentiellement par chaque attribut de l’élément. Utilisez la HasAttributes propriété pour tester si le nœud a des attributs. La AttributeCount propriété retourne le nombre d’attributs pour le nœud actuel.

    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. Enregistrez la solution. Générez la solution.

  13. Appuyez sur Ctrl+F5 pour exécuter l’exemple d’application.

Afficher la liste complète du code dans Visual Studio .NET 2002 ou dans 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

Vous devez ajouter l’option de compilateur de prise en charge du Common Language Runtime (/clr:oldSyntax) dans Visual C++ 2005 pour compiler correctement l’exemple de code précédent. Pour ajouter l’option de compilateur de prise en charge du Common Language Runtime dans Visual C++ 2005, procédez comme suit :

  1. Cliquez sur Project, puis sur <Propriétés ProjectName>.

    Note

    <ProjectName> est un espace réservé pour le nom du projet.

  2. Développez Propriétés de configuration, puis cliquez sur Général.

  3. Cliquez pour sélectionner la prise en charge du Common Language Runtime, ancienne syntaxe (/clr :oldSyntax) dans le paramètre de projet de support Common Language Runtime dans le volet droit, cliquez sur Appliquer, puis cliquez sur OK.

    Pour plus d’informations sur l’option de compilateur de prise en charge du Common Language Runtime, consultez /clr (Compilation Common Language Runtime).

Ces étapes s’appliquent à l’ensemble de l’article.

Afficher l’exemple de sortie

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

Dépannage

Lorsque vous exécutez l’exemple d’application, vous pouvez recevoir le message d’erreur suivant :

Une exception non gérée de type System.Xml.XmlException s’est produite dans System.xml.dll Informations supplémentaires : Erreur système.

References

Pour plus d’informations sur la lecture xml avec XmlReader, consultez Lecture XML avec XmlReader.