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

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

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

Configuration requise

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.Xmlde la bibliothèque de classes .NET Framework .

Comment 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 complète du code ou suivre ces étapes pour générer l’application.

  4. Spécifiez la directive using sur l’espace System.Xml de noms afin que vous n’ayez pas à qualifier les XmlTextReader déclarations de classe plus loin 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 une indépendance vis-à-vis 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 utiliserez la constante à l’étape suivante avec XmlTextReader. Ajoutez l’exemple de code suivant à la procédure main de la classe par défaut :

    String URLString = "http://localhost/books.xml";
    
  6. Créez un instance de la XmlTextReader classe et spécifiez l’URL. En règle générale, XmlTextReader est utilisé si vous avez besoin d’accéder au xml en tant que données brutes sans la surcharge d’un modèle DOM (Document Object Model) ; par conséquent, XmlTextReader fournit un mécanisme plus rapide pour la lecture du 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.

    Remarque

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

    Une fois le chargement effectué, XmlTextReader effectue des lectures séquentielles pour déplacer 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 et Value retournent le nom du nœud (les noms d’élément et d’attribut) et la valeur du nœud (le texte du nœud) du nœud actif (ou de l’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.

    Remarque

    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 leur sont associés. La MovetoNextAttribute méthode se déplace séquentiellement dans 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. Générez et exécutez votre projet.

Liste complète du code

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 résultat

<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>

Résolution des problèmes

Lorsque vous testez le code, vous pouvez recevoir le message d’erreur d’exception suivant :

Exception non prise en charge 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 devant 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 qui précède le premier nœud du document Books.xml .

References