reklama

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í

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...
reklama
Určitě si přečtěte

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

** V Brně byl velký výpadek služeb UPC ** Důvodem je překopnutý páteřní kabel ** V některých lokalitách služby stále nefungují

5.  12.  2016 | Jakub Čížek | 99

ASUS ZenBook 3 se začal prodávat v Česku. Je ve všem lepší než MacBook, ale bude to stačit?

ASUS ZenBook 3 se začal prodávat v Česku. Je ve všem lepší než MacBook, ale bude to stačit?

** Novinka od Asusu míří přímo proti MacBooku od Applu ** Nabídne daleko více výkonu za stejné peníze

2.  12.  2016 | David Polesný | 144

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

** Zmizí klasické vyhledávače ** Budeme programovat buňky ** Kvantové počítače překonají šifry

Včera | Jakub Čížek | 33


reklama