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.

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í, XML, Díl, Jednoduchý typ, Použití

Určitě si přečtěte

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

17.  11.  2017 | Vojtěch Malý | 206

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

** Každá elektrická krabička má konektor pro napájení nebo baterii ** Jenže pozor, jednou by to tak nemuselo být ** Drobná elektronika se může živit rádiovými vlnami

14.  11.  2017 | Jakub Čížek | 15

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

** I pod hranicí desíti tisíc korun existují dobře použitelné notebooky ** Mohou plnit roli pracovního stroje i zařízení pro zábavu ** Nejlevnější použitelný notebook koupíte za pět a půl tisíce

16.  11.  2017 | Stanislav Janů | 53


Aktuální číslo časopisu Computer

Otestovali jsme 5 HDR 4K televizorů

Jak natáčet video zrcadlovkou

Vytvořte si chytrou domácnost

Radíme s koupí počítačového zdroje