reklama

Poznáváme C# a Microsoft.NET 43. díl – práce s XML

Po minulém úvodu do jazyka XML a jeho využití v prostředí .NET na toto téma dnes navážeme a kromě rozšíření znalostí o možnostech čtení XML dokumentu pomocí XMLReaderu si ukážeme jak XML dokument programově vytvořit.

Jak na atributy v XML

V minulém díle jsme měli pro naše zkušební účely vytvořen jednoduchý XML dokument, který obsahoval data o zaměstnancích. Jeho obsah byl tvořen pouze elementy. Možné ovšem je údaje o konkrétním zaměstnanci uchovávat v podobě atributů elementů, takže například nějak takto:

/// <summary>
/// Ukazka pouziti XMLReaderu pro precteni
///  obsahu atributu jednotlivych elementu
/// </summary>
public class XMLReaderPriklady
{
  public static void VypisZamestnance()
  {
    XmlReader lReader = new XmlTextReader("C:/zamestnanci.xml");
    try
    {
      while(lReader.Read())
      {
        switch(lReader.NodeType)
        {
          //zajima nas pouze start elementu
          case XmlNodeType.Element :
            //pokud je jmeno elementu zamestnanec a element ma nejake atributy
            if (lReader.Name.Equals("zamestnanec") && lReader.HasAttributes)
            {
              //vypiseme atributy
              Console.WriteLine("Jmeno : {0}", lReader["jmeno"]);
              Console.WriteLine("Prijmeni : {0}", lReader["prijmeni"]);
              Console.WriteLine("Pozice : {0}", lReader["pozice"]);
              Console.WriteLine();
            }
          break;
        }
      }
    }
    finally
    {
      lReader.Close();
    }
  }
}

V zásadě by pro vás po přečtení minulého dílu nemělo být v tomto příkladu moc novinek. Jednoduše se při zpracovávání počátečního tagu uzlu podíváme, zda-li jeho jméno není zamestnanec a pokud ano, tak se ještě pomocí metody HasAttributes ujistíme, jestli element obsahuje nějaké atributy. V případě, že jsou splněny obě výše uvedené podmínky, tak si pomocí vlastnosti Item instance třídy XMLReader, která je pro nás v jazyce C# implementována formou indexeru vyzvedneme hodnoty jednotlivých atributů.

Toto ovšem není jediná cesta, kterou se můžeme vydat ke zjištění názvů a hodnot atributů jednotlivého elementu. XMLReader umožňuje i průchod všemi atributy právě čteného uzlu, jak ukazuje následující příklad.

/// <summary>
/// Ukazka prochazeni atributy cteneho uzlu
/// </summary>
public static void VypsaniAtributu()
{
  XmlReader lReader = new XmlTextReader("C:/zamestnanci.xml");
  try
  {
    while (lReader.Read())
    {
      //zjistime, jestli ma aktualni uzel nejake atributy
      if (lReader.HasAttributes)
      {
        //vypiseme nazev elementu
        Console.WriteLine("Element : {0}",lReader.Name);
        for(int i = 0; i < lReader.AttributeCount;i++)
        {
          //posuneme pozici readeru na atribut a vypiseme jej
          lReader.MoveToAttribute(i);
          Console.WriteLine("Nazev : {0} - Hodnota : {1}",lReader.Name, lReader.Value);
        }
      }
    }
  }
  finally
  {
    lReader.Close();
  }
}

V příkladu zkontrolujeme jestli právě čtený uzel má nějaké a atributy a v případě, že ano, tak použijeme k průchodu cyklus for, kde využijeme instanční vlastnost AttributeCount, která nám vrátí počet přítomných atributů na uzlu. Průchod probíhá tím stylem, že použitím metody MoveToAttribute posuneme XMLReader z pozice uzlu na pozici konkrétního atributu, tudíž vlastnosti Name a Value budou po tomto posunutí vracet název a hodnotu atributu (před posunutím vlastnost Name vrací jméno čteného uzlu, jak je v příkladu ukázáno).

Zápis do XML dokumentu

Tak jako jsou implementace třídy XMLReader používány za účelem jednosměrného čtení XML dokumentu, tak jsou konkrétní implementace asbtraktní třídy XMLWriter použity k zápisu jednotlivých částí XML dokumentu a opět pouze jedním směrem od shora dolů. V základní knihovně třídy .NET frameworku se na rozdíl od třídy XMLReader pro XMLWriter nachází pouze její jediná implementace a to třída XMLTextWriter, pro kterou je zdrojem dat v jazyce XML nějaký datový proud. Třida XMLWriter nám tedy nabízí jednoduché a příjemné rozhraní pro vytváření XML Dokumentů. A jak může vypadat její použití? To můžete vidět níže.

/// <summary>
/// Priklad na vytvoreni XML dokumentu pomoci tridy XMLWriter
/// </summary>
public class XMLWriterPriklady
{
  public static void ZapisZamestnance()
  {
    ArrayList lZamestnanci = new ArrayList();
    lZamestnanci.Add(new Zamestanec("Jan","Novak","Analytik"));
    lZamestnanci.Add(new Zamestanec("Jiri","Joudek","Vyvojar"));
    XmlTextWriter lWriter = null;
    try
    {
      lWriter = new XmlTextWriter(new StreamWriter("C:/zamestnanci2.xml"));
      //zapiseme start dokumentu
      lWriter.WriteStartDocument();
      //zapiseme korenovy element
      lWriter.WriteStartElement("zamestnanci");
      //pro kazdeho zamestnance vytvorime element z odpovidajicimi atributy
      foreach(Zamestanec lZamestnanec in lZamestnanci)
      {
        lWriter.WriteStartElement("zamestnanec");
        lWriter.WriteAttributeString("jmeno",lZamestnanec.Jmeno);
        lWriter.WriteAttributeString("prijmeni",lZamestnanec.Prijmeni);
        lWriter.WriteAttributeString("pozice",lZamestnanec.Pozice);
        lWriter.WriteEndElement();
      }
      //uzavreme dokument
      lWriter.WriteEndDocument();
    }
    finally
    {
      lWriter.Close();
    }

  }
}

Jak vidíte, tak použití je vcelku jednoduché. V příkladu je vytvářen úplně nový dokument, takže první co je po vytvoření instance třídy XMLTextWriter učiněno je zavolání metody WriteStartDocument, která zařídí zapsaní deklarace XML dokumentu (<?xml version="1.0" encoding="utf-8"?>).

Po té pro každého zaměstnance z kolekce vytvoříme pomocí metody WriteStartElement počáteční tag elementu a před zapsáním jeho konce, což se provádí metodou WriteEndElement provedeme zapsání jednotlivých atributů elementu, které nám představují údaje o zaměstnanci. Atribut je do „rozepsaného“ uzlu zapsán za pomoci metody WriteAttributeString, jíž v přetížené verzi, která je v příkladu použita, předáme pouze název a hodnotu vytvářeného atributu.

Příklady ke článku si můžete stáhnout pomocí tohoto odkazu.

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

6 komentářů

Nejnovější komentáře

  • Daniel Housar 4. 1. 2009 16:36:37
    Ještě dodám takový postřeh. Všechny příklady, které si stahnete jsou...
  • Daniel Housar 4. 1. 2009 16:01:25
    Error 1 The type or namespace name 'Zamestanec' could not be found (are...
  • Pavel Polívka 24. 11. 2007 13:39:58
    Programovou oflline verzi seriálu naleznete ke stažení na...
reklama
Určitě si přečtěte

Facebook o nás ví vše. Díky dobře skrytému vyhledávači se to dozví i ostatní

Facebook o nás ví vše. Díky dobře skrytému vyhledávači se to dozví i ostatní

** Facebook o nás ví vše, protože mu to sami řekneme ** V jeho nitru se skrývá mocný vyhledávač ** Mohou jej zneužít stalkeři, sociální inženýři a další nezbedníci

16.  2.  2017 | Jakub Čížek | 76

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

Včera | Jakub Čížek | 33

Nevyznáte se ve značení procesorů Intelu? Tady máte tahák

Nevyznáte se ve značení procesorů Intelu? Tady máte tahák

** Z označení procesorů Intelu se toho dá mnoho vyčíst ** Ze čtyř čísel se dozvíte něco o výkonu i grafickém jádru ** Poradíme, jak číst číselné označení i písmena na konci

13.  2.  2017 | Stanislav Janů | 37


Aktuální číslo časopisu Computer

Stavba 3D tiskárny

Výbava domácí elektrodílničky

Budoucnost 5G sítí

Velké testy microSD karet a vodních chladičů

Přehled mobilních tarifů

reklama
reklama