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.Xml
de 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.
Copiez le fichier Books.xml dans le
\Inetpub\Wwwroot
dossier de votre ordinateur.Ouvrez Visual Studio.
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.
Spécifiez la directive using sur l’espace
System.Xml
de noms afin que vous n’ayez pas à qualifier lesXmlTextReader
déclarations de classe plus loin dans votre code. Vous devez utiliser la directive using avant toute autre déclaration.using System.Xml;
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 avecXmlTextReader
. Ajoutez l’exemple de code suivant à la procédure main de la classe par défaut :String URLString = "http://localhost/books.xml";
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. LaXmlTextReader
classe a différents constructeurs pour spécifier l’emplacement des données XML. Le code suivant crée une instance d’unXmlTextReader
objet et transmet l’URL au constructeur :XmlTextReader reader = new XmlTextReader (URLString);
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 laRead
méthode pour obtenir l’enregistrement suivant. LaRead
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();
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é . LesName
propriétés etValue
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érationNodeType
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; } }
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 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("<" + 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; } }
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 .