TOC

This article has been localized into Dutch by the community.

XML:

XML lezen met de XmlReader class

Er zijn hoofdzakelijk twee methods om XML te lezen met C#: De XmlDocument class en de XmlReader class. XmlDocument leest de hele XML inhoud in het geheugen in, en laat je er daarna naar hartenlust in heen en weer navigeren, of zelfs een query uitvoeren op het document met de XPath technologie.

De XmlReader is een sneller en minder geheugen vereisend alternatief. Je kunt er per element mee door de XML content gaan, terwijl je naar de waarde kunt kijken, en dan naar het volgende element gaan. Al doende gebruikt het dus weinig geheugen omdat het alleen maar het ene element vasthoudt. Omdat je de waarden handmatig moet checken krijg je alleen maar de relevante elementen, waardoor het erg snel is. In dit hoofdstuk focussen we ons op de XmlReader class, en gaan dan in het volgende hoofdstuk naar de XmlDocument class.

Laten we een klein voorbeeld proberen waar we een XML document lezen met valutakoersen. Gelukkig voor ons heeft de Europese Centrale Bank er een die we kunnen gebruiken. We zouden het kunnen downloaden en het van de harddrive lezen, maar zowel de XmlReader als de XmlDocument classes kunnen net zo goed van een URL lezen als van een lokaal bestand. Je kunt de XML hier zien ( http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml) en hier komt nu wat code en een uitleg:

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

namespace ParsingXml
{
    class Program
    {
        static void Main(string[] args)
        {            
            XmlReader xmlReader = XmlReader.Create("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");
            while(xmlReader.Read())
            {
                if((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "Cube"))
                {
                    if(xmlReader.HasAttributes)
                        Console.WriteLine(xmlReader.GetAttribute("currency") + ": " + xmlReader.GetAttribute("rate"));                    
                }
            }
            Console.ReadKey();
        }
    }
}

We beginnen met het creëren van het XmlReader exemplaar met gebruik van de static Create() method. Die heeft verscheidene 'overloads', maar de simpelste ervan gebruikt een URL aanwijzing naar het bestand. In een while 'loop' roepen we de Read() method aan bij het XmlReader exemplaar. Die stuurt de reader door naar het volgende element en retourneert dan true zolang er meer te lezen valt. Binnen de 'loop' kunnen we nu een van de vele properties en methods gebruiken om toegang te krijgen tot de data van het lopende element.

In ons geval checken we het NodeType om te zien of we een Element hebben (het 'tag' gedeelte) en of de naam "Cube" is. Zoals je in het XML document kunt zien, staat elke valutakoers binnen een element dat Cube heet, dus dit wilden we weten, de rest slaan we over. Zodra we het Cube element hebben, doen we een formele check om te zien of het attributen heeft ( dat moet!) en vervolgens gebruiken we de GetAttribute() method om de twee attribuutwaarden te lezen: "valuta" en "koers". We drukken ze af op de console en gaan dan door naar het volgende element. Het resultaat moet dan een complete lijst van valuta en hun huidige koers zijn.

Zoals je ziet is dit nogal makkelijk te doen, maar hoofdzakelijk omdat we de data in dezelfde volgorde nodig hebben als waarin ze gelezen zijn, zonder er verder wat dan ook maar mee te doen. In het volgende hoofdstuk doen we hetzelfde, maar dan met de XmlDocument class, zodat je het verschil kunt zien.

Noot: Je moet je ervan bewust zijn dat er veel manieren zijn waarop bovenstaande code kan mislukken en een exception kan opleveren, waar je uiteraard iets aan moet doen. Bekijk het hoofdstuk over exceptions voor meer informatie.


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!