Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
Démarrez Visual Studio .NET 2002, Visual Studio .NET 2003 ou Visual Studio 2005.
Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.
La boîte de dialogue Nouveau projet apparaît.
Sous Types de projets, cliquez sur Projets Visual C++.
Note
Dans Visual Studio 2005, les projets Visual C++ sont remplacés 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 au
System.xml.dllprojet. 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::Xmlde noms comme suit :using namespace System::Xml;Pour ce faire, vous n’avez pas besoin de qualifier les
XmlTextReaderdéclarations de classe plus loin dans votre code. Vous devez utiliser la directive using avant toute autre déclaration.Créez une instance de l’objet
XmlTextReader. Remplissez l’objetXmlTextReaderavec le fichier .xml.En règle générale, la
XmlTextReaderclasse est utilisée si vous devez accéder aux données XML brutes sans surcharge du DOM. Par conséquent, laXmlTextReaderclasse offre un moyen plus rapide de lire les données XML. LaXmlTextReaderclasse a des différencesconstructorsqui spécifient l’emplacement des données XML.Le code suivant crée une instance de la
XmlTextReaderclasse, 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
_tmainfonction est remplacée par la fonction principale.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); }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
NodeTypepropriété. LaNamepropriété et laValueproprié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
NodeTypedé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; } }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
MovetoNextAttributeméthode passe séquentiellement par chaque attribut de l’élément. Utilisez laHasAttributespropriété pour tester si le nœud a des attributs. LaAttributeCountproprié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();
}
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 :
Cliquez sur Project, puis sur <Propriétés ProjectName>.
Note
<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 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.