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

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

** Herní hardware se od toho běžného často liší jen vzhledem ** Při výběru stále nezapomínejte na základní parametry ** Poradíme jak vybrat herní hardware i periferie

20.  2.  2017 | Stanislav Janů | 36

10 nejhorších produktů v historii Microsoftu

10 nejhorších produktů v historii Microsoftu

20.  2.  2017 | Karel Javůrek | 141

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

** AMD uvedlo první tři procesory Ryzen 7 ** Všechny budou pracovat s osmi jádry a šestnácti vlákny ** Na pulty obchodů se dostanou už za týden

22.  2.  2017 | Stanislav Janů | 132

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

** Každý bastlíř se po čase neobjede bez armády švábů ** Dnes si některé z nich vyzkoušíme ** Třeba zázračný posuvný registr

19.  2.  2017 | Jakub Čížek | 40

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

** Evropští úředníci chtějí, aby byly Desítky transparentnější ** Microsoft od jara skutečně chystá změny ** Ochráncům soukromí to ale nestačí

21.  2.  2017 | Jakub Čížek | 218

Remix Singularity: Microsoft si na tom vylámal zuby. Jak dopadne Android?

Remix Singularity: Microsoft si na tom vylámal zuby. Jak dopadne Android?

** Microsoft do svých telefonů integroval desktopové prostředí ** Moc to ale nevyšlo, chyběl pořádný výkon ** Teď to zkoušejí ex-googleři s Remix Singularity

23.  2.  2017 | Jakub Čížek | 74


Aktuální číslo časopisu Computer

Supertéma o počítačové bezpečnosti

AMD Ryzen přichází

Velké testy kinoprojektorů a levných špuntových sluchátek

Příslušenství do USB-C

reklama
reklama