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

Traductions disponibles Traductions disponibles
Numéro d'article: 301228 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F301228
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.
Agrandir tout | Réduire tout

Sommaire

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.

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.Xml
    Imports 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.StringReader
      stream = 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 de fichier 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.NodeType
    Case 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 Select
    Loop
    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.NodeType
    Case 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 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
    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.Xml
    Imports System.IO
    Module 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 Sub
    
    End 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.

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 :
http://msdn.microsoft.com/library/periodic/period01/xml0101.htm
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.

Propriétés

Numéro d'article: 301228 - Dernière mise à jour: lundi 13 octobre 2003 - Version: 1.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework Software Development Kit 1.0
Mots-clés : 
kbhowto kbhowtomaster kbxml tslic_tslic KB301228
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
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.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com