TOC

This article has been localized into Czech by the community.

XML:

Čtení XML s třídou XmlDocument

Jak bylo popsáno v předchozí kapitole, XmlDocument spotřebovává více paměti a může být o něco pomalejší než přístup pomocí XmlReader. Avšak pro mnohé účely může být práce s XmlDocument jednodušší a často vyžaduje méně kódu. Jakmile byl obsah XML přečten, můžete data číst hierarchicky, přesně jako struktura XML, s kořenovým prvkem, který může mít potomky, kteří mohou mít další potomky a tak dále. V předchozí kapitole jsme analyzovali XML data od Evropské centrální banky, která nám mohla říct o aktuálních směnných kurzech měn, a teď uděláme totéž, ale použijeme třídu XmlDocument.

XML lze najít na aktuální URL (http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml) a data, která potřebujeme, jsou v elementech <cube>. Ve stromové struktuře to vypadá nějak takto:

<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 je náš kořenový prvek, ke kterému můžeme přistupovat pomocí vlastnosti DocumentElement. Poté budeme moci přistupovat k podřízeným uzlům tohoto uzlu pomocí kolekce vlastností ChildNodes. V našem příkladu chceme podřízené uzly tři úrovně pod kořenovým/document elementem. To můžeme udělat pomocí následujícího kódu, který v podstatě dělá totéž co kód založený na XmlReader v předchozí kapitole:

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();
}
    }
}

Jak vidíte, přistupujeme k uzlům Cube postupným procházením hierarchie ChildNodes. Od DocumentElement (kořenového prvku) požádáme o třetí podřízený uzel (indexovaný od nuly), poté požádáme o první podřízený uzel tohoto uzlu a poté požádáme o celou kolekci podřízených uzlů. Samozřejmě to je možné jen proto, že známe strukturu XML dokumentu, a rozhodně to není velmi flexibilní, ale je snadné to později změnit. Nicméně způsob, jakým navigujete v XML dokumentu, velmi závisí na zdroji XML a datech, která potřebujete. Pro tento příklad bude výše uvedený postup perfektně fungovat a dokonce s velmi omezeným množstvím kódu, ale pro jiné účely možná budete chtít použít trochu více kódu pro zvýšení čitelnosti.

Jakmile máme uzel s kurzem měny, přistupujeme ke dvěma vlastnostem, které nás zajímají, a poté je vypíšeme na konzoli, stejně jako v příkladu v předchozí kapitole.


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!