V tomto příspěvku si ukážeme, jak snadné je v jazyce C# za pomocí .NETu číst XML formát.
Pro čtení XML formátu použím 2 možnosti. Buďto pomocí XmlTextReader třídy, která dostačuje pro čtení jednoduchých XML struktur, nebo pomocí čtení uzlů, které umožňuje mnohem více operací než samotný XmlTextReader. Pro vyzkoušení použiji ukázkový XML soubor k nalezení na wikipedii zde.
Xml soubor vypadá následovně:
<?xml version="1.0" encoding="UTF-8"?> <!-- Poznamka je nutné přidat více receptů. --> <recept jméno="chleba" čas_přípravy="5 minut" čas_vaření="3 hodiny"> <titulek>Jednoduchý chleba</titulek> <přísada množství="3" jednotka="šálky">Mouka</přísada> <přísada množství="0,25" jednotka="unce">Kvasnice</přísada> <přísada množství="1,5" jednotka="šálku">Horká voda</přísada> <přísada množství="1" jednotka="kávová lžička">Sůl</přísada> <instrukce> <krok>Smíchejte všechny přísady dohromady a dobře prohněťte.</krok> <krok>Zakryjte tkaninou a nechejte hodinu v teplé místnosti.</krok> <krok>Znovu prohněťte, umístěte na plech a pečte v troubě.</krok> </instrukce> </recept>
Pro používání XML knihoven musí být v projektu přidána reference: System.Xml
Samotný kód je velmi jednoduchý a funguje tak, že nejprve vytvoříme a inicializujeme XmlDocument. Poté načteme pomocí metody Load() zdrojový XML soubor. Zavináč před řetězcem znamená, že obsah řetězce bude automaticky escapován (nemusíme tedy dvojit zpětná lomítka).
Dále pak inicializujeme element (tedy dáme impuls k parsování dokumentu na jednotlivé elementy). Nyní již zbývá jen definovat počáteční uzel (formou Xpath) a tyto uzly již může dále procházet, číst a zanořovat se do případných potomků.
Celý kód vypadá následovně:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace xmltest
{
class Program
{
static void Main(string[] args)
{
XmlDocument xml = new XmlDocument();
xml.Load(@"C:test.xml");
XmlElement root = xml.DocumentElement;
XmlNodeList recepts = root.SelectNodes("/recept");
foreach (XmlNode recept in recepts)
{
foreach (XmlNode tags in recept)
{
switch (tags.Name)
{
case "titulek":
Console.WriteLine("Titulek: " + tags.InnerText);
break;
case "přísada":
Console.WriteLine("tPřísada: "+ tags.InnerText);
if (tags.Attributes.Count > 0) // obsahuje přísada atributy?
{
foreach (XmlAttribute attr in tags.Attributes)
{
Console.WriteLine("tt" + attr.Name + ": " + attr.Value);
}
}
break;
case "instrukce":
Console.WriteLine("Instrukce přípravy: ");
if (tags.HasChildNodes) // obsahuje uzel instrukce děti?
{
int i = 1;
foreach (XmlNode krok in tags)
{
Console.WriteLine("t" + (i++) + ". " + krok.InnerText);
}
}
break;
}
}
}
}
}
}
Výstup pak vypadá následovně:

Pingback: BRETT
Pingback: JASON
Pingback: JOEL
Pingback: JERRY
Pingback: MARION
Pingback: BRYAN
Pingback: GLENN
Pingback: DALE
Pingback: EVAN
Pingback: VINCENT
Pingback: VERNON
Pingback: NICHOLAS
Pingback: LOUIS
Pingback: DWIGHT
Pingback: RICARDO
Pingback: ZACHARY
Pingback: FRED
Pingback: MILTON
Pingback: NICK
Pingback: MARION
Pingback: ALEXANDER
Pingback: ENRIQUE
Pingback: FREDRICK
Pingback: ANGELO
Pingback: JOSE
Pingback: HUBERT
Pingback: MAX
Pingback: BRYAN
Pingback: RAFAEL
Pingback: TYLER