Poznáváme C# a Microsoft.NET 42. díl – úvod do použití XML

Tento díl je začátkem našeho zaobírání se prací se soubory XML v prostředí .NET frameworku. V tomto prvním díle se naučíme procházet obsah XML pomocí třídy XMLReader.
Poznáváme C# a Microsoft.NET 42. díl – úvod do použití XML

XML? Co je to?

Věřím, že se mezi čtenáři naleznou i tací, kteří se s XML ještě neměli tu čest setkat a proto se v krátkosti o tomto jazyku zmíním. XML, což znamená eXtensible Markup Language (rozšířitelný značkovací jazyk) je značkovací jazyk, který je podmnožinou historicky známého jazyku SGML (Standard Generalized Markup Language). Jazyk XML mimo jiné odstraňuje přílišnou složitost SGML. Když jste uviděli slovíčko značkovací zajisté se mnohým z vás vybaví velmi známý značkovací jazyk pro tvorbu webových stránek, kterým je HTML.

XML je tedy také jazyk, který používá tagy, atributy atd. Mezi XML a HTML je ale podstatný rozdíl a to v tom, že HTML slouží pouze k definici vzhledu pomocí striktně definovaných tagů, ale použití XML je mnohem širší. Protože XML je založen na tvorbě vlastních tagů je využíván hlavně pro přenos informací, které mohou být různými způsoby zobrazeny nebo dále zpracovány. Lze i jinými slovy říci, že HTML je jazyk, který určuje jak něco zobrazit a XML spíše říká co zobrazit (nebo jakkoliv jinak zpracovat). Jedním z hlavním důvodů pro vznik jazyku XML byla potřeba vymyslet společný formát pro komunikaci mezi různými systémy. Jak vypadá velmi jednoduchý XML dokument, který eviduje informace o zaměstnancích můžete vidět níže.

<?xml version="1.0" encoding="utf-8" ?>
<zamestnanci>
  <zamestnanec>
    <jmeno>Jan</jmeno>
    <prijmeni>Novak</prijmeni>
  </zamestnanec>
  <zamestnanec>
    <jmeno>Jiri</jmeno>
    <prijmeni>Joudek</prijmeni>
  </zamestnanec>
</zamestnanci>

Tento dokument je tak jednoduchý, že jediné co v něm můžeme vidět je použití deklarace dokumentu, ve kterém je určena verze XML spolu s použitým znakovým kódováním, a jinak pouze tagy, které uvozují jednotlivé části uchovávané informace. Jednotlivé dvojice tagů (počáteční a konečný) tvoří takzvané uzly. Takže kořenový uzel je uzel zamestnanci, jehož vnořenými uzly (často nazývány dětmi) jsou uzly zamestnanec. A informace o konkrétním zaměstnanci, jsou opět tvořeny vnořenými uzly uzlu zamestnanec. Z toho můžeme vidět, že informace jsou v případě XML uchovávány v hierarchické struktuře.

Jak na zpracování XML v .NET frameworku

Všechny třídy, které bychom mohli při našem programování s XML v .NET potřebovat jsou začleněny do jmenného prostoru System.Xml. V zásadě jsou při zpracovávání XML v .NET k dispozici dva odlišné způsoby zpracování. Prvním z nich je zpracování pomocí DOM. Pod touto zkratkou se ukrývá Document Object Model a o tomto zpracování si v tomto díle povíme jen to, že se jedná o standard vydaný konsorciem W3C, který nám umožňuje využít onu zmíněnou hierarchickou strukturu XML dokumentu. My si dnes v tomto díle povíme něco o přístupu druhém, kterým je zpracování XML dokumentu pomocí jednosměrného čtení, které nám přináší oproti mechanismu DOM o mnoho menší paměťové nároky, ale zase u něj nevyužíváme výhod hierarchie XML dokumentu.

Jednosměrné čtení XML dokumentu

K jednosměrnému čtení od začátku XML dokumentu až po jeho konec nám jsou v .NET frameworku k dispozici třídy, které jsou potomky abstraktní třídy XMLReader. Konkrétně se jedná o třídy XMLTextReader, XMLNodeReader a XMLValidatingReader. O posledních dvou vám v tomto díle sdělím pouze to, že XMLNodeReader je pro použití v kombinaci s modelem DOM a umožňuje projít pouze určitou část dokumentu a XMLValidatingReader slouží k validaci XML dokumentu oproti DTD (Document Type Definition – definice typu dokumentu) nebo oproti XSD (XML Schema Definition). Jak DTD tak XSD jsou způsoby, kterými určujeme jaké tagy, atributy atd. mohou nebo mají být na konkrétním místě v XML dokumentu použity.

Použití třídy XMLTextReader

XMLTextReader je asi nejpoužívanější implementace abstraktní třídy XMLReader. Tato třída dokáže procházet XML dokumentem, který je k parsování (zpracování XML) dodán ve formě streamu. Následující příklad ukazuje průchod XML dokumentem, kterým je náš ukázkový soubor obsahující informace o zaměstnancích, takže zpracovává pouze některé z mnoha typů uzlů v procházeném XML.

/// <summary>
/// Ukazka na pruchod jednoduchym XML dokumentem
/// </summary>
public class PrikladZamestnanci
{
  public static void VypisXML()
  {
    XmlReader lReader = new XmlTextReader("C:\\Zamestnanci.xml");
    while (lReader.Read())
    {
      //rozhodneme se podle typu uzlu jak zareagujeme
      switch(lReader.NodeType)
      {
        //pocatecni tag
        case XmlNodeType.Element :
          Console.Write("<{0}>",lReader.Name);
        break;
        //vnitrek tagu
        case XmlNodeType.Text :
          if (lReader.HasValue)
          {
            Console.Write(lReader.Value);
          }
        break;
        //konecny tag
        case XmlNodeType.EndElement :
          Console.WriteLine("</{0}>",lReader.Name);
        break;
      }
    }
  }
}

Jak můžete vidět, tak použití XMLReaderu je celkem jednoduché. Metoda Read nám indikuje, že ještě existují nějaké elementy k přečtení. Pomocí vlastnosti NodeType zjistíme jaký je aktuální typ uzlu, protože nám vrací výsledek typu XMLNodeType, jehož položky reprezentují všechny možné typy uzlů. Takže hodnota Element nám označuje, že jsme narazili na počáteční tag, hodnota Text, že jsme narazili na textový uzel, což je vlastně vnitřek uzlu a hodnota EndElement indikuje, že aktuální čtená část dokumentu je konečný tag. Pokud bychom se pokoušeli procházet chybně vytvořený XML dokument, tak by při volání metody Read byla vyhozena výjimka XMLException.

Jak jsem psal, tak XMLTextReader zpracovává XML ve formě streamu. Konstruktorů této třídy je celá řada. Já jsem použil tu nejpohodlnější verzi, které pouze předáme cestu k souboru, což je ale ekvivalentní k použití konstruktoru očekávající instanci třídy System.IO.TextReader (přesnění jejího potomka). Takže jsem to mohl napsat i takto:

XmlReader lReader = new XmlTextReader(new StreamReader("C:\\zamestnanci.xml"));

Soubory se zdrojovými kódy jsou k dispozici zde.

Příští díl na tento naváže, takže bude opět o použití XML. Mimo jiné se například dozvíme jak do XML dokumentu zapisovat.

Témata článku: Software, Microsoft, Programování

11 komentářů

Nejnovější komentáře

  • Pavel Polívka 24. 11. 2007 13:38:59
    Programovou oflline verzi seriálu naleznete ke stažení na...
  • Pavel Polívka 24. 11. 2007 13:38:33
    Programovou oflline verzi seriálu naleznete ke stažení na...
  • Jakub Hegenbart 25. 9. 2005 22:16:20
    Jsem téměř vždy slušný, ale právě lidé jako Vy jsou příčinou výskytu slova...
Určitě si přečtěte

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

** Sledujte počasí z více zdrojů a podrobněji, přesněji tak určíte, jaké počasí vás potká na dovolené ** Na webu najdete hromadu pokročilých předpovědí počasí, ale i specializované meteorologické služby ** Vybrali jsme 14 služeb na počasí, které se vám můžou hodit

23.  6.  2017 | Jakub Čížek | 19

Nejlepší program pro střih videa na doma: 9 video editorů, ze kterých si vyberete

Nejlepší program pro střih videa na doma: 9 video editorů, ze kterých si vyberete

** Pokročilé střihové programy pro neprofesionální využití stojí do 3 000 Kč, jsou ale i zdarma ** Podpora 4K, hromada editačních funkcí a efektové filtry jsou samozřejmostí ** Vybrali jsme 9 nejzajímavějších programů pro nejrozšířenější operační systém Windows

25.  6.  2017 | Stanislav Janů | 32

Herní počítač vs. Xbox One X: Kvalita obrazu není všechno

Herní počítač vs. Xbox One X: Kvalita obrazu není všechno

** Nový Xbox One X slibuje hraní ve 4K s HDR za 13 tisíc korun ** Aby stejnou kvalitu obrazu zvládl počítač, museli byste za něj dát minimálně dvakrát tolik ** Přesto herní počítače stále svůj smysl mají

24.  6.  2017 | Tomáš Holčík | 58


Aktuální číslo časopisu Computer

Bojujeme proti Fake News

Dva velké testy: fotoaparáty a NASy

Co musíte vědět o změně evropského roamingu

Radíme s výběrem základní desky