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
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
bibliothèque de classes .NET Framework.
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 de code complète ou poursuivre ces étapes pour générer l’application.
Spécifiez la directive using sur l’espace
System.Xml
de noms afin que vous ne soyez pas obligé de qualifier lesXmlTextReader
déclarations de classe ultérieurement 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 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 avecXmlTextReader
. Ajoutez l’exemple de code suivant à la procédure principale de la classe par défaut :String URLString = "http://localhost/books.xml";
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. 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.
Notes
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 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 retournentValue
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érationNodeType
détermine le type de nœud. L’exemple de code suivant affiche le nom des éléments et le type de document.Notes
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 sont associés. La
MovetoNextAttribute
méthode se déplace séquentiellement à travers 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; } }
Créez et exécutez votre projet.
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;
}
}
}
}
}
<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>
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 .