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 :
Démarrez Visual Studio .NET 2002, Visual Studio .NET 2003 ou Visual Studio 2005.
On the File menu, point to New, and then click Project.
La boîte de dialogue Nouveau projet s'affiche.
Sous Types de projets, cliquez sur Projets Visual C++.
Remarque
Dans Visual Studio 2005, Projets Visual C++ est remplacé par Visual C++.
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.
Dans la zone Nom , tapez Q815658, puis cliquez sur OK.
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é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.Créez un instance de l’objet
XmlTextReader
. Remplissez l’objetXmlTextReader
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, laXmlTextReader
classe fournit un moyen plus rapide de lire les données XML. LaXmlTextReader
classe a des valeurs différentesconstructors
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.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); }
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é . LaName
propriété et laValue
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; } }
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 laHasAttributes
propriété pour tester si le nœud a des attributs. LaAttributeCount
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; } }
Enregistrez la solution. Générez la solution.
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 :
Cliquez sur Projet, puis sur <Propriétés du nom du> projet.
Remarque
<ProjectName> est un espace réservé pour le nom du projet.
Développez Propriétés de configuration, puis cliquez sur Général.
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.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour