This article has been localized into Dutch by the community.
XML lezen met de XmlDocument class
Zoals beschreven in het vorige hoofdstuk vraagt het XmlDocument meer van het geheugen en is wellicht wat langzamer dan de XmlReader.
De XML kan hier gevonden worden (http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml) en de data die we nodig hebben zit in de <cube> elementen. In een boom structuur ziet het er ongeveer zo uit:
<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" is ons hoofd ("root") element, die we kunnen bereiken door de eigenschap "DocumentElement" te gebruiken. We krijgen dan toegang tot de "kinderen" ("children") van dit element ("node") door de collectie eigenschap "ChildNodes" te gebruiken. In ons voorbeeld willen we de child nodes die drie lagen onder het hoofd element zitten. We kunnen dat doen met de volgende code, die eigenlijk hetzelfde doet als de XmlReader code van het vorige hoofdstuk:
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();
}
}
}
Zoals je kunt zien krijgen we toegang tot de "Cube" elementen door de "ChildNodes" hierarchie af te lopen. Vanaf "DocumentElement" (het hoofd element) vragen we om het derde onderliggende element (Nul geïndexeerd, dus begin te tellen vanaf 0). Vervolgens vragen we om het eerste onderliggende element van het element waar we nu zijn. Tenslotte vragen we om de hele collectie elementen die in dat element zit. Dit is enkel mogelijk omdat we de structuur van het gehele XML document kennen en dit niet heel flexibel of makkelijk aan te passen later. Desalniettemin, de manier waarop je door een XML document navigeert hangt erg af van de XML bron en data die je nodig hebt. Voor dit voorbeeld werkt bovenstaande prima en met een zeer minimale hoeveelheid code, maar voor andere doelen is het handig misschien een beetje meer code gebruiken om de leesbaarheid te verbeteren.
Wanneer we een element hebben met een valuta koers (currency rate) nemen we de twee eigenschappen waarin we geïnteresseerd zijn en drukken we die af naar de console, net zoals het voorbeeld in het vorige hoofdstuk.