Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

COMMENT FAIRE : Lire les données XML à partir d'un flux

Ancien nº de publication de cet article : F301228
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.
Cet article traite d'une version bêta d'un produit Microsoft. Les informations contenues dans cet article sont fournies " en l'état " et peuvent faire l'objet de modifications sans préavis.

Aucun support produit officiel n'est proposé par Microsoft pour ce produit bêta. Pour plus d'informations sur les modalités d'assistance pour une version bêta, consultez la documentation incluse dans les fichiers du produit, ou référez-vous au site Web à partir duquel vous avez téléchargé la version.
Résumé
Cet article explique comment utiliser la classe XmlTextReader pour lire des données XML (Extensible Markup Language) à partir d'un flux. Le flux de données peut provenir de sources variées, telles qu'un flux d'octets issu d'un serveur, un fichier ou une classe TextReader.

Retour au début de la page

Configuration requise

La liste suivante présente le matériel, les logiciels, l'infrastructure réseau et les Service Packs dont vous aurez besoin :
  • Microsoft Windows 2000 Professionnel, Windows 2000 Server, Windows 2000 Advanced Server ou Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
Le présent article suppose que vous maîtrisez les sujets suivants :
  • Terminologie XML
  • Création et lecture de données XML

Procédures à suivre pour lire des données XML à partir d'un flux

  1. Ouvrez Visual Studio .NET.
  2. Créez une nouvelle application de console Microsoft Visual Basic (VB) ou Microsoft Visual C#.

    REMARQUE : Les étapes présentées ci-dessous offrent une description pas à pas des procédures à suivre pour créer l'application. Vous pouvez également passer directement au code complet présenté à l'étape 10.
  3. Assurez-vous que le projet contient une référence aux espaces de noms System.xml et System.IO.
  4. Utilisez l'instruction IMPORTS sur l'espace de noms Xml afin de ne pas avoir à rédiger de déclaration XmlTextReader sur ces espaces ultérieurement dans votre code. Vous devez utiliser l'instruction IMPORTS avant toute autre déclaration, comme suit :
    Code de Visual Basic .NET
    Imports System.XmlImports System.IO
    Code de Visual C#
    using System.Xml;using System.IO;
  5. Créez ou récupérez le flux de données XML. Un flux de données est une représentation abstraite d'un périphérique d'entrée ou de sortie qui est la source ou la destination des données (dans le cas présent, des données XML). Un flux de données peut être imaginé comme un flux d'octets à partir duquel vous pouvez écrire ou lire des données.

    Les flux sont utilisés pour offrir une indépendance par rapport au périphérique. Ainsi, aucune modification de programme n'est nécessaire si la source d'un flux vient à changer. Il existe plusieurs manières différentes de créer un flux pour la classe XmlTextReader. Sélectionnez l'un des exemples de code suivant pour l'ajouter dans la procédure principale du module par défaut :
    • Exemple de code utilisant l'objet StringReader :

      L'objet StringReader lit les caractères à partir des chaînes et utilise une valeur de chaîne lors de la construction de l'application.Code de Visual Basic .NET
      Dim stream as System.IO.StringReaderstream = new StringReader("<?xml version='1.0'?>" & _"<!-Ce fichier est un inventaire de librairie. -->" & _"<bookstore>" & _" <book genre=""autobiography"" ISBN=""1-861003-11-0"">" & _"   <title>L'autobiographie de Benjamin Franklin</title>" & _"   <author>" & _"       <first-name>Benjamin</first-name>" & _"       <last-name>Franklin</last-name>" & _"   </author>" & _"   <price>8.99</price>" & _" </book>" & _"</bookstore>")
      Code C#
      StringReader stream;stream = new StringReader("<?xml version='1.0'?>" +	"<!-Ce fichier représente un fragment d'une base de données d'inventaire	d'une librairie. -->" +	"<bookstore>" +	" <book genre=\"autobiography\" publicationdate=\"1981\" ISBN=\"1-861003-11-0\">" +	"   <title>L'autobiographie de 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>Gorgias</title>" +	"   <author>" +	"       <name>Platon</name>" +	"   </author>" +	"   <price>9.99</price>" +	" </book>" +	"</bookstore>");
    • Exemple de code utilisant l'objet StreamReader :

      L'objet StreamReader est utilisé pour lire des caractères à partir de fichiers. L'objet lit dans le nom du fichier à lire lors de la construction de l'application :Code de Visual Basic .NET
      Dim stream as System.IO.StreamReader' Charge les données XML dans le fichier books.xml dans un nouveau flux.stream = New StreamReader ("books.xml")
      Code C#
      System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");
      Le fichier utilisé ici est nommé Books.xml. Sachez que vous pouvez créer votre propre fichier Books.xml. Un exemple defichier Books.xml est compris dans Visual Studio .NET et dans le SDK de .Net Framework.

  6. Construisez une classe XmlTextReader à l'aide du flux de données. Habituellement, la classe XmlTextReader est utilisée si vous avez besoin d'accéder aux données XML en tant que données brutes, sans utiliser le temps système nécessaire à un modèle DOM (Document Object Model). Ainsi, la classe XmlTextReader fournit un mécanisme plus rapide de lecture des données XML. La classe XmlTextReader possède différents constructeurs permettant de spécifier l'emplacement des données XML. Le code suivant permet de charger la classe XmlTextReader à partir d'un flux de données :
    Code de Visual Basic .NET
    Dim reader As XmlTextReader = New XmlTextReader (stream)
    Code C#
    XmlTextReader reader = null;reader = new XmlTextReader (stream);
  7. Parcourez les données XML. Une fois chargée, la classe XmlTextReader effectue des lectures séquentielles pour parcourir les données XML et utilise la méthode Read pour obtenir l'enregistrement suivant. Elle renvoie la valeur False lorsqu'il ne reste plus d'enregistrement.
    Code de Visual Basic .NET
    Do While (reader.Read())    ' Traiter les données ici.    Console.WriteLine(reader.Name)Loop' La lecture du fichier XML est achevée.Console.ReadLine() 'Pause
    Code C#
    while (reader.Read()) {    // Traiter les données ici.    ...}while (reader.Read()) {    // Traiter les données ici.	Console.WriteLine(reader.Name);}Console.ReadLine();
  8. 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. Les propriétés Name et Value renvoient le nom du nœud (les noms d'élément et d'attribut) et la valeur (le texte du nœud) du nœud ou de l'enregistrement sélectionné. L'énumération NodeType détermine le type de nœud. L'exemple suivant affiche les noms des éléments et le type de document. Notez que dans cet exemple les attributs des éléments ne sont pas pris en compte.
    Code de Visual Basic .NET
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Afficher le début de l'élément.Console.Write("<" + reader.Name)Console.WriteLine(">")Case XmlNodeType.Text 'Afficher le texte dans chaque élément.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Afficher la fin de l'élément.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop
    Code C#
    while (reader.Read()) {    switch (reader.NodeType)     {        case XmlNodeType.Element: // Le nœud est un élément.            Console.Write("<" + reader.Name);   Console.WriteLine(">");            break;  case XmlNodeType.Text: //Afficher le texte dans chaque élément.            Console.WriteLine (reader.Value);            break;  case XmlNodeType. EndElement: //Afficher la fin de l'élément.            Console.Write("</" + reader.Name);   Console.WriteLine(">");            break;    }}
  9. Examinez les attributs. Les types de nœuds des éléments peuvent inclure une liste de nœuds d'attributs qui leur sont associés. La méthode MovetoNextAttribute passe séquentiellement par chaque attribut dans un é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 sélectionné.
    Code de Visual Basic .NET
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Afficher le début de l'élément.Console.Write("<" + reader.Name)         If reader.HasAttributes Then 'Si des attributs existent         	While reader.MoveToNextAttribute()					'Afficher le nom et la valeur de l'attribut.Console.Write(" {0}='{1}'", reader.Name, reader.Value)End WhileEnd IfConsole.WriteLine(">")Case XmlNodeType.Text 'Afficher le texte dans chaque élément.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Afficher la fin de l'élément.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop
    Code C#
    while (reader.Read()) {    switch (reader.NodeType)     {        case XmlNodeType.Element: // Le nœud est un élément.            Console.Write("<" + reader.Name);            while (reader.MoveToNextAttribute()) // Lire les attributs.                Console.Write(" " + reader.Name + "='" + reader.Value + "'");            Console.Write(">");   Console.WriteLine(">");            break;  case XmlNodeType.Text: //Afficher le texte dans chaque élément.            Console.WriteLine (reader.Value);            break;  case XmlNodeType. EndElement: //Afficher la fin de l'élément.            Console.Write("</" + reader.Name);   Console.WriteLine(">");            break;    }}

  10. Le code complet est fourni ici pour votre commodité.
    Code de Visual Basic .Net
    Imports System.XmlImports System.IOModule Module1    Sub Main()        Dim stream As System.IO.StreamReader        ' Charge les données XML du fichier books.xml dans un nouveau flux.        stream = New StreamReader("books.xml")        Dim reader As XmlTextReader = New XmlTextReader(stream)        Do While (reader.Read())            Select Case reader.NodeType                Case XmlNodeType.Element 'Display beginning of element.                    Console.Write("<" + reader.Name)                    If reader.HasAttributes Then 'Si des attributs existent                        While reader.MoveToNextAttribute()                            'Afficher le nom et la valeur de l'attribut.                            Console.Write(" {0}='{1}'", reader.Name, reader.Value)                        End While                    End If                    Console.WriteLine(">")                Case XmlNodeType.Text 'Afficher le texte dans chaque élément.                    Console.WriteLine(reader.Value)                Case XmlNodeType.EndElement 'Afficher la fin de l'élément.                    Console.Write("</" + reader.Name)                    Console.WriteLine(">")            End Select        Loop    End SubEnd Module

    Code C#
    using System;using System.Xml;using System.IO;namespace ReadXMLFromStream{	/// <summary>	/// Description résumée de Class1	/// </summary>	class Class1	{		static void Main(string[] args)		{			System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");			XmlTextReader reader = null;			reader = new XmlTextReader (stream);			while (reader.Read()) 			{				switch (reader.NodeType) 				{					case XmlNodeType.Element: // Le nœud est					un élément.						Console.Write("<" + reader.Name);						while (reader.MoveToNextAttribute())						// Read attributes.							Console.Write(" " +							reader.Name + "='"						+ reader.Value + "'");						Console.Write(">");						Console.WriteLine(">");						break;					case XmlNodeType.Text: //Afficher le texte dans					chaque élément.						Console.WriteLine (reader.Value);						break;					case XmlNodeType. EndElement: //Afficher la fin					de l'élément.						Console.Write("</" + reader.Name);						Console.WriteLine(">");						break;				}			}		}	}}
  11. Construisez et exécutez votre projet.
Retour au début de la page

RÉFÉRENCES

Pour plus d'informations, consultez l'article " XML in Microsoft .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation " (article en anglais) dans MSDN Magazine sur le site Internet de Microsoft suivant :Pour plus d'informations sur les classes XmlReader, StreamWriter et StreamReader, consultez la documentation correspondante dans la bibliothèque des classes Microsoft .NET Framework.

Pour plus d'informations sur l'utilisation de XmlReader pour lire des données XML, consultez le Guide du développeur Microsoft .NET Framework.

Retour au début de la page
dotnet xml
Propriétés

ID d'article : 301228 - Dernière mise à jour : 10/13/2003 13:05:09 - Révision : 1.3

  • Microsoft .NET Framework Software Development Kit 1.0
  • kbhowto kbhowtomaster kbxml tslic_tslic KB301228
Commentaires