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

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

Version d’origine du produit : Visual C++
Numéro de la 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 la création de jetons 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 W3C (World Wide Web Consortium). Cet article explique comment effectuer un accès rapide et tokenisé aux données XML au lieu d’utiliser un modèle objet, tel que le DOM (Document Object Model) XML.

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

Cet article fait référence à l’espace de noms de la bibliothèque de classes Microsoft .NET Framework suivant : System.xml

Configuration requise

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 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 d’un fichier, procédez comme suit :

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

  2. On the File menu, point to New, and then click Project.

    La boîte de dialogue Nouveau projet s'affiche.

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

    Remarque

    Dans Visual Studio 2005, Projets Visual C++ est remplacé 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 à System.xml.dll dans le 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;
    

    Vous effectuez cette opération afin de ne pas avoir à qualifier les déclarations de XmlTextReader classe plus loin dans votre code. Vous devez utiliser la directive using avant toute autre déclaration.

  8. Créez un 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 la surcharge du DOM. Par conséquent, la XmlTextReader classe fournit un moyen plus rapide de lire les données XML. La XmlTextReader classe a des valeurs différentes 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 _tmain fonction :

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

    Remarque

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

  9. Lisez les données XML.

    Remarque

    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 se déplacer 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 actuel ou pour l’enregistrement actif :

    • Nom du nœud qui est le nom de l’élément et le nom de l’attribut.
    • Valeur de nœud qui correspond au 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 des éléments :

    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 qui sont associés aux types de nœuds d’élément. La MovetoNextAttribute méthode se déplace séquentiellement dans 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();
}

Remarque

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 Projet, puis sur <Propriétés du nom du> projet.

    Remarque

    <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 Prise en charge du Common Language Runtime, Ancienne syntaxe (/clr :oldSyntax) dans le paramètre de projet de prise en charge du 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 du 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>

Résolution des problèmes

Lorsque vous exécutez l’exemple d’application, le message d’erreur suivant peut s’afficher :

Exception non prise en charge de type System.Xml. XmlException s’est produit dans System.xml.dll Informations supplémentaires : Erreur système.

References

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