This article is currently in the process of being translated into French (~98% done).
Working with the XmlNode class
Dans le chapitre précédent, nous avons utilisé la classe XmlDocument pour analyser un fichier XML. Une nouvelle classe introduite en exemple est indispensable pour analyser du XML avec XmlDocument : la classe XmlNode. Le flux XML est encapsulé dans un XmlNode qui est l'élément racine et vous permet d'accéder aux éléments fils en utilisant la propriété ChildNodes. De plus, la classe XmlNode vous donne accès à beaucoup d'autres informations comme le nom de la balise, les attributs, la valeur texte et le XML lui-même. Ce chapitre est une brève description des aspects les plus intéressants de la classe XmlNode, qu'il est important de connaître car la classe XmlNode est un concept clé dans l'interprétation XML avec la classe XmlDocument. Dans les exemples ci-dessous, nous utiliserons la propriété DocumentElement. Même si cette dernière renvoie un objet de type XmlElement, la situation est la même car XmlElement dérive de XmlNode.
La propriété Name vous donnera simplement le nom du nœud. L'exemple suivant affichera le texte "user" :
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<user name=\"John Doe\">A user node</user>");
Console.WriteLine(xmlDoc.DocumentElement.Name);
Console.ReadKey();
La propriété InnerText contiendra le texte compris entre la balise ouvrante et la balise fermante, comme ceci :
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<test>InnerText is here</test>");
Console.WriteLine(xmlDoc.DocumentElement.InnerText);
Console.ReadKey();
La propriété InnerXml est similaire à la propriété InnerText, à ceci près que InnerText supprime le contenu XML du texte, alors que la propriété InnerXml le conserve. L'exemple suivant illustre bien la différence :
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<users><user>InnerText/InnerXml is here</user></users>");
Console.WriteLine("InnerXml: " + xmlDoc.DocumentElement.InnerXml);
Console.WriteLine("InnerText: " + xmlDoc.DocumentElement.InnerText);
Console.ReadKey();
La propriété OuterXml est identique à InnerXml, mais inclut également le code XML du nœud lui-même. L'exemple suivant illustre cette différence :
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<users><user>InnerText/InnerXml is here</user></users>");
Console.WriteLine("InnerXml: " + xmlDoc.DocumentElement.InnerXml);
Console.WriteLine("OuterXml: " + xmlDoc.DocumentElement.OuterXml);
Console.ReadKey();
Nous avons travaillé avec des attributs dans le chapitre précédent, donc voici un autre exemple :
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<user name=\"John Doe\" age=\"42\"></user>");
if(xmlDoc.DocumentElement.Attributes["name"] != null)
Console.WriteLine(xmlDoc.DocumentElement.Attributes["name"].Value);
if(xmlDoc.DocumentElement.Attributes["age"] != null)
Console.WriteLine(xmlDoc.DocumentElement.Attributes["age"].Value);
Console.ReadKey();