Notes
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.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é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.Créez une 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 surcharge du DOM. Par conséquent, laXmlTextReader
classe offre un moyen plus rapide de lire les données XML. LaXmlTextReader
classe a des différencesconstructors
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.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
NodeType
propriété. LaName
propriété et laValue
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; } }
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 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();
}
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.