Partager via


Utiliser Visual C# pour lire des données XML à partir d’une URL

Cet article explique comment utiliser la XmlTextReader classe pour lire du code XML à partir d’une URL. Les informations diffusées peuvent provenir de toutes sortes de sources, telles qu’un flux d’octets à partir d’un serveur, d’un fichier ou d’une TextReader classe.

Version du produit d’origine : Visual Studio
Numéro de base de connaissances d’origine : 307643

Spécifications

Cet article suppose que vous êtes familiarisé avec les rubriques suivantes :

  • Microsoft Visual Studio
  • Terminologie XML
  • Création et lecture de code XML
  • URL et création d’un point de terminaison XML

Cet article fait référence à l’espace de noms System.Xmlbibliothèque de classes .NET Framework.

Guide pratique pour lire des données XML à partir d’une URL

Cet exemple 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) .NET. Ce fichier est également disponible en téléchargement ; reportez-vous au premier élément de la section Références de cet article pour l’emplacement de téléchargement.

  1. Copiez le fichier Books.xml dans le \Inetpub\Wwwroot dossier de votre ordinateur.

  2. Ouvrez Visual Studio.

  3. Créez une application console Visual C#. Vous pouvez passer à la section Liste de code complète ou poursuivre ces étapes pour générer l’application.

  4. Spécifiez la directive using sur l’espace System.Xml de noms afin que vous ne soyez pas obligé de qualifier les XmlTextReader déclarations de classe ultérieurement dans votre code. Vous devez utiliser la directive using avant toute autre déclaration.

    using System.Xml;
    
  5. Récupérez le flux XML au moyen d’une URL. Les flux sont utilisés pour fournir l’indépendance de l’appareil ; par conséquent, les modifications du programme ne sont pas requises si la source d’un flux change. Déclarez une constante pour l’URL http://localhost/books.xml . Vous allez utiliser la constante à l’étape suivante avec XmlTextReader. Ajoutez l’exemple de code suivant à la procédure principale de la classe par défaut :

    String URLString = "http://localhost/books.xml";
    
  6. Créez une instance de la XmlTextReader classe et spécifiez l’URL. En règle générale, XmlTextReader il est utilisé si vous avez besoin d’accéder au code XML en tant que données brutes sans surcharge d’un modèle DOM (Document Object Model) ; par conséquent, XmlTextReader fournit un mécanisme plus rapide pour lire le code XML. La XmlTextReader classe a différents constructeurs pour spécifier l’emplacement des données XML. Le code suivant crée une instance d’un XmlTextReader objet et transmet l’URL au constructeur :

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Lisez le code XML.

    Note

    Cette étape montre une boucle de base, externe while et les deux étapes suivantes décrivent comment utiliser cette boucle et lire du code XML.

    Une fois qu’il est chargé, XmlTextReader effectue des lectures séquentielles pour parcourir les données XML et utilise la Read méthode pour obtenir l’enregistrement suivant. La Read méthode retourne false s’il n’y a plus d’enregistrements.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Inspectez 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é. Les Name propriétés retournent Value le nom du nœud (les noms d’éléments et d’attributs) et la valeur du nœud (texte du nœud) du nœud actif (ou enregistrement). 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.

    Note

    Cet exemple ignore les attributs d’élément.

    while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + 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("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  9. Inspectez les attributs. Les types de nœuds d’élément peuvent inclure une liste de nœuds d’attribut qui sont associés. La MovetoNextAttribute méthode se déplace séquentiellement à travers chaque attribut de l’élément. Utilisez la HasAttributes propriété pour tester si le nœud a des attributs. La AttributeCount 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("<" + reader.Name);
    
                while (reader.MoveToNextAttribute()) // Read the attributes.
                    Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                Console.Write(">");
                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("</" + reader.Name);
                Console.WriteLine(">");
                break;
        }
    }
    
  10. Créez et exécutez votre projet.

Listing du code complet

using System;
using System.Xml;

namespace ReadXMLfromURL
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            String URLString = "http://localhost/books.xml";
            XmlTextReader reader = new XmlTextReader (URLString);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Read the attributes.
                            Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                        Console.Write(">");
                        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("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
        }
    }
}

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 testez le code, vous pouvez recevoir le message d’erreur d’exception suivant :

Une exception non gérée de type System.Xml.XmlException s’est produite dans system.xml.dll Informations supplémentaires : déclaration XML inattendue. La déclaration XML doit être le premier nœud du document et aucun espace blanc n’est autorisé à apparaître avant celui-ci. Ligne 1, position 4.

L’erreur d’exception se produit sur la ligne de code suivante.

while (reader.Read())

Pour résoudre l’erreur d’exception, supprimez le caractère d’espace blanc qui précède le premier nœud du document Books.xml .

References