TOC

This article is currently in the process of being translated into French (~98% done).

XML:

Reading XML with the XmlDocument class

Comme décrit dans le précédent chapitre, l'approche "XmlDocument" est plus gourmande en mémoire et possiblement légèrement plus lente que l'approche "XmlReader". Cependant, dans bien des cas, "XmlDocument" peut se révéler plus aisé à manipuler tout en demandant moins de codage. Une fois le contenu XML lu, il est possible d'accéder aux données hiérarchiquement, comme pour une structure XML, avec un élément "parent" pouvant avoir des éléments "enfants", lesquels peuvent à leur tour avoir des éléments "enfants", et ainsi de suite. Dans le précédent chapitre nous avons exploré des données XML nous renseignant sur les taux de change des monnaies issues de la Banque Centrale Européenne. Nous allons faire de même, mais cette fois-ci, nous utiliserons la classe "XmlDocument".

Le fichier XML peut être téléchargé à l'URL (http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml). Les données nécessaires sont dans l'élément <cube> . Dans une structure en arborescence, cela ressemble à ça.

<gesmes:Envelope>
    [other child nodes]
    <Cube>
<Cube time="2011-04-12">
    <Cube currency="USD" rate="1.4470"/>
    <Cube currency="JPY" rate="121.87"/>
    …

"gesmes:Envelope" est notre élément "racine", auquel on peut accéder par le biais de la propriété "DocumentElement". On pourra ensuite accéder aux éléments "enfants" de ce nœud en utilisant la propriété "ChildNodes collection". Dans notre exemple, on désire accéder au nœud "enfant" situé trois niveaux au-dessous du nœud "racine", ceci peut se faire avec le code ci-dessous, qui, pour l'essentiel, fait la même chose que le code basé sur la classe "XmlReader" vu au précédent chapitre :

using System;
using System.Text;
using System.Xml;

namespace ParsingXml
{
    class Program
    {
static void Main(string[] args)
{
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
    foreach(XmlNode xmlNode in xmlDoc.DocumentElement.ChildNodes[2].ChildNodes[0].ChildNodes)
Console.WriteLine(xmlNode.Attributes["currency"].Value + ": " + xmlNode.Attributes["rate"].Value);
    Console.ReadKey();
}
    }
}

Comme on peut le voir, on accède aux nœuds de "Cube" en explorant la hiérarchie "ChildNodes". A partir de "DocumentElement" (l'élément "racine"), on demande le troisième nœud-enfant (base d'index zéro), ensuite on demande le premier nœud-enfant de celui-ci puis la collection entière des nœuds-enfants. Bien évidemment, cela n'est rendu possible que parce que nous connaissons la structure du document XML, ce qui est malaisé à maintenir par la suite. Quoi qu'il en soit, la façon de naviguer dans un document XML dépend beaucoup de la source XML et des données que l'on cherche à obtenir. L'exemple précédent, fonctionne très bien avec très peu de code, mais il est parfois préférable d'utiliser davantage de code pour en augmenter la lisibilité.

Une fois atteint le nœud comportant le taux de change, on accède aux deux propriétés qui nous concernent, et on les ressort à la console, comme vu dans le précédent chapitre.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!