Comment faire pour lire les données XML à partir d’un fichier à l’aide de Visual C++


Pour obtenir une version Microsoft Visual C# .NET de cet article, reportez-vous à la section.
307548 .

Pour obtenir une version Microsoft Visual Basic .NET de cet article, reportez-vous à la section.
301225 .

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

System.xml

DANS CETTE TÂCHE.

Résumé


Cet article décrit comment utiliser la classe XmlTextReader pour lire les données XML à partir d’un fichier. La classe XmlTextReader assure l’analyse et jetons des données XML. Le
Classe XmlTextReader implémente également la spécification XML 1.0, outre les espaces de noms dans la spécification XML qui est définie par le World Wide Web Consortium (W3C). Cet article explique comment un rapide, l’accès en continu aux données XML au lieu d’utiliser un modèle d’objet, par exemple l’objet modèle DOM (Document XML) sous forme de jetons.

Retour au début

Configuration requise

Cet article suppose que vous maîtrisez les sujets suivants :
  • Terminologie XML
  • La création et la lecture d’un fichier XML

La liste suivante met en évidence le matériel recommandé, logiciel, infrastructure réseau et les service packs dont vous avez besoin :
  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005
Retour au début

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 qui est inclus avec les Démarrages rapides du .NET de Microsoft Software Development Kit (SDK). Le fichier Books.xml est également téléchargeable à partir du Microsoft Download Center :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
    De Nouveau, puis cliquez sur projet.

    Le
    Boîte de dialogue Nouveau projet s’affiche.
  3. Sous Types de projets, cliquez sur Projets Visual C++.

    Remarque Dans Visual Studio 2005, les Projets Visual C++ est modifié pour Visual C++.
  4. Sous modèles, cliquez sur
    Application C++ géré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. Dans le projet, ajoutez une référence à System.xml.dll. Pour plus d’informations sur la façon d’ajouter des références à un projet Visual C++ managé, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

    310674 comment faire : ajouter des références à un projet Visual C++ managé

  7. Spécifiez à l’aide de la directive dans l’espace de noms System::Xml comme suit :
    using namespace System::Xml;
    Cela afin que vous n’êtes pas obligé de qualifier les déclarations de classe XmlTextReader ultérieurement dans votre code. Vous devez utiliser à l’aide de la directive avant toute autre déclaration.
  8. Créez une instance de l’objet XmlTextReader . Remplir l’objet XmlTextReader avec le fichier .xml.

    En général, la classe XmlTextReader est utilisée si vous devez accéder aux données XML brutes sans la surcharge du DOM. Par conséquent, la classe XmlTextReader fournit un moyen plus rapide pour lire les données XML. La classe XmlTextReader possède différents constructeurs qui spécifient l’emplacement des données XML.

    Le code suivant crée une instance de la classe XmlTextReader et charge ensuite le fichier Books.xml. Ajoutez le code suivant à la fonction _tmain :
    XmlTextReader* reader = new XmlTextReader ("books.xml");
    Remarque Dans Visual C++ 2005, la fonction _tmain est modifiée à la fonction main .
  9. Lire les données XML.

    Remarque Cette étape présente une boucle extérieure pendant . Les deux étapes qui suivent cette étape illustrent l’utilisation de 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 de lecture continue parcourir le fichier .xml séquentiellement jusqu'à ce que la méthode Read a atteint la fin du fichier. Lorsque la méthode de lecture atteint la fin du fichier, la méthode Read renvoie 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 possède un type de nœud qui peut être déterminé à partir de la propriété NodeType . La nom de propriété et la propriété Value renvoient les informations suivantes pour le nœud actuel ou de l’enregistrement en cours :
    • Le nom du nœud qui est le nom d’élément et le nom de l’attribut.
    • La valeur du nœud 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 de l’é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.

    Types de nœuds d’élément peuvent inclure une liste de nœuds d’attribut qui sont associés à des types de nœuds d’élément. La méthode MovetoNextAttribute passe séquentiellement par chaque attribut de l’élément. Utilisez la propriété HasAttributes pour vérifier si le nœud possède des attributs. La propriété AttributeCount renvoie le nombre d’attributs du 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. Enregistrer la solution. Générez la solution.
  13. Appuyez sur CTRL + F5 pour exécuter l’exemple d’application.
Retour au début

Permet d’afficher l’intégralité du code dans Visual Studio .NET 2002 ou 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 common language runtime prise en charge (/ CLR : oldSyntax) dans Visual C++ 2005 pour compiler correctement l’exemple de code précédent. Pour ajouter l’option de compilateur common language runtime prise en charge dans Visual C++ 2005, procédez comme suit :

  1. Cliquez sur projet, puis cliquez sur Propriétés de < nom > .



    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. Sélectionnez prise en charge du Common Language Runtime, ancienne syntaxe (/ CLR : oldSyntax) dans le paramètre du projet Common Language Runtime prend en charge dans le volet droit, cliquez sur Appliquer, puis cliquez sur OK.

Pour plus d’informations sur le common language runtime prend en charge les option du compilateur, visitez le site Web de Microsoft à l’adresse suivante :
/CLR (Compilation pour le common Language Runtime)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Ces étapes s’appliquent à l’article complet.

Retour au début

Afficher l’exemple de sortie

Remarque Le fichier Books.xml qui est inclus avec les Démarrages rapides du Kit de développement .NET a deux différences dans le fichier Books.xml à partir du lien de téléchargement qui est mentionné dans la section « Lire les données XML à partir d’un fichier ».
  • Le fichier Books.xml à partir du lien de téléchargement n’a pas le
    attribut de publicationdate .
  • Le fichier Books.xml à partir du lien de téléchargement n’a pas le
    Attribut ISBN .
<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>
Retour au début

Résolution des problèmes

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

Une exception non gérée de type System.Xml.XmlException s’est produite dans System.xml.dll
Informations supplémentaires : erreur système.
Vous pouvez recevoir ce message d’erreur si vous utilisez le fichier Books.xml à partir du lien de téléchargement qui est mentionné dans la section « Lire les données XML à partir d’un fichier ». Ce problème peut se produire si le fichier Books.xml est un espace blanc au début du fichier. Pour résoudre ce problème, ouvrez le fichier Books.xml à l’aide d’un éditeur de texte et supprimez l’espace blanc.

Retour au début

Références


Pour plus d’informations sur la lecture de données XML avec XmlReader, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :Retour au début