reklama

Staňte se programátorem: Napište si vlastní adresář

Dneska si napíšeme jednoduchý adresář kontaktů, který se z principu nebude lišit od toho, který používá třeba Outlook Express. Zároveň se seznámíme se zpracováváním XML dokumentu.

V dnešním článku si vytvoříme jednoduchý adresář, který bude obsahovat seznam našich kontaktů s jejich osobními údaji (přezdívka, telefonní číslo, bydliště, fotografie apod.). Jednotlivé kontakty budeme moci organizovat do jednoduchých skupin (práce, rodina, přátelé aj.) a celý adresář pak bude uložený v XML souboru, který je dle mnohých pro svou jednoduchou a přirozenou stromovou strukturu standardem budoucnosti pro ukládání dat. XML souborem je třeba HTML stránka, RSS zdroj, ale i některé kancelářské formáty včetně OpenDocument standardu z OpenOffice.org kancelářského balíku a nového Office OpenXML, tedy vylepšeného formátu kancelářského balíku Microsoft Office 2007. 

Práce s XML z pohledu programátora nepatřila v minulosti k těm nejjednodušším úkonům, my vám však ukážeme, že se XML bát nemusíte a pokud si osvojíte základní principy XML parseru, zjistíte, že se s XML dokumenty pracuje v každém z programovacích jazyků prakticky totožně.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Uživatelské rozhraní našeho adresáře kontaktů a struktura XML souboru

Pro práci s XML souborem použijeme třídu System.Xml.XmlDocument, která nečte jednotlivé XML tagy ze souboru, ale načte celý soubor do paměti, kde k němu pomocí metod této třídy můžeme přistupovat. Čtení a zápis do paměti je zároveň mnohem rychlejší než do souboru na pevném disku. Jakmile XML dokument v paměti dle chuti zpracujeme, opět ho přeneseme na disk. V hantýrce programátorů jsme vlastně použili čtení a zápis přes buffer.

Schéma XML souboru

Každý XML dokument musí povinně obsahovat jeden hlavní kořenový uzel, v našem případě to bude uzel s názvem „kontakty“, který obsahuje poduzly s názvem „skupina“. Každý tento poduzel bude mít jeden atribut představující název této skupiny. V jednotlivých skupinách pak budou uloženy poduzly s jednotlivými kontakty. Jejich název bude jak jinak „kontakt“ s povinným atributem „nick“, tedy přezdívkou člověka, jehož údaje budou v tomto uzlu uloženy. Podobný XML dokument by mohl vypadat například takto:

<?xml version="1.0" encoding="unicode"?>
  <kontakty>
   
<skupina nazev="Přátelé">
      <kontakt nick="Pája">
      <pozn>V pátek zajít na večeři</pozn>
     
<jmeno>Pavel Marčík</jmeno>
      <tel>737430123</tel>
      <icq>333327652</icq>
      <adresa>Dvořákova 343, Písek</adresa>
      <obr>C:\obrazky\pavel17.jpg</obr>
    </kontakt>
  </skupina>
</kontakty>

Načtení XML dokumentu v C#

Jak jsem již nastínil v úvodu, pro práci s XML dokumentem budeme používat třídu System.Xml.XmlDocument, která XML načte ze souboru a uloží jej do paměti. K načtení XML dokumentu použijeme metodu Load. K uložení pak metodu Save.

XmlDocument doc = new XmlDocument();
doc.Load(@“C:\kontakty.xml“);

Manipulace s uzly a elementy XML dokumentu

Pro výběr konkrétního poduzlu XML dokumentu nám poslouží metoda SelectSingleNode, která jako argument očekává výraz jazyka XPath což je je dotazovací jazyk, pomocí kterého lze adresovat části XML dokumentu. S XPath lze z XML dokumentu vybírat jednotlivé elementy a pracovat s jejich hodnotami a atributy. Více o tomto jazyce najdete na webových stránkách www.zvon.org. Metoda SelectSingleNode vrací instanci třídy XmlNode představující určitý element XML dokumentu.

string xpath = "//kontakty//skupina[@nazev='{0}']";
// Vybere uzel skupiny do kterého chceme nový kontakt uložit
XmlNode node = doc.SelectSingleNode(string.Format(xpath,skupina));

Pro vytvoření nového poduzlu použijeme metodu CreateElement třídy XmlDocument, kde je nutné jako argument dosadit název nového poduzlu. Daný poduzel následně přiřadíme k jeho rodičovskému uzlu pomocí metody AppendChild:

// Vytvoří nový uzel (element) představující
XmlElement kontakt = doc.CreateElement("kontakt");

// Přiřadí ke skupině nový kontakt
node.AppendChild(kontakt);

Pro vytvoření nového atributu uzlu použijeme ten samý postup s tím rozdílem, že budeme pracovat s třídou XmlAttribute:

// Vytvoří nový atribut
XmlAttribute atr = doc.CreateAttribute("nick");

// atributu přiřadí název přezdívky nového kontaktu
atr.InnerText = novyKontakt;

// přiřadí k elementu atribut
kontakt.Attributes.Append(atr);

Pro nastavení vnitřní hodnoty uzlu použijeme vlastnost InnerText:

XmlNode nod = doc.SelectSingleNode(“//....“);
nod.InnerText = “Nějaká hodnota“;

Pro odstranění určitého poduzlu použijeme metodu RemoveChild třídy XmlNode. Tato metoda očekává jako argument instanci třídy XmlNode představující hledaný poduzel. Například chceme-li z kořenového uzlu (kontakty) odstranit poduzel s názvem skupina, jehož hodnota atributu „nazev“ je „Přátelé“, zavoláme tuto metodu:

// Vybere odstraňovaný uzel představující konkrétní skupinu
XmlNode odstrNod = doc.SelectSingleNode("//skupina[@nazev='Přátelé']"));

// Z kořenového uzlu odstraní konkrétního potomka (vybraný uzel)
doc.DocumentElement.RemoveChild(odstrNod);

Nevoní vám XML? Příště vyzkoušíme SQL databázi

A to je vlastně všechno. Dnes jsme si tedy popsali základní rutiny pro manipulaci s XML dokumentem a jeho stromovou strukturou. Jak příklad jsme si napsali jednoduchý adresář. Pokud byste jej rozšířili, klidně se může srovnávat třeba s adresářem kontaktů programu Outlook Express. Pokud vám tedy není programovaní cizí, můžete náš adresář rozšířit, poslat nám jej na tento e-mail a my vaši verzi zveřejníme v některém z příštích článků.

Pokud jste ale přesto nepřišli XML na chuť, vydržte do příštího týdne, stejný program si totiž napíšeme s pomocí SQL databáze, se kterou umí Microsoft .NET pracovat na jedničku.

Nakonec nesmí chybět ani slíbený spustitelný program a projekt. K prvnímu budete potřebovat nainstalovaný novější Microsoft .NET Framework, pakliže si budete chtít projekt upravit a sestavit, budete potřebovat bezplatné vývojové prostředíMicrosoft Visual C# 2008 Express Edition.

Témata článku: Software, Programování, Unicode, .doc, Element, Nick

20 komentářů

Nejnovější komentáře

  • Daniel Housar 4. 1. 2009 19:00:01
    Někdo tu přede mnou napsal, že celé je to tu reklama na MS VS. Zvláštní že...
  • wizpal 4. 10. 2008 22:16:57
    ale no tak. nebuďte tak přísní, každý nějak začínal. :-D ale jinak...
  • PavelR 4. 10. 2008 19:04:43
    Treba kdyz si necham templatem zalozit WCF sluzbu, tak pri editaci jeji...
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ů | 35

10 nejhorších produktů v historii Microsoftu

10 nejhorších produktů v historii Microsoftu

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

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 | 39

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ů | 128

Vyhledávání ve Windows není dokonalé, zkuste to 5× jinak

Vyhledávání ve Windows není dokonalé, zkuste to 5× jinak

** V macOS funguje vyhledávání Spotlight, ve Windows podobně propracovaná funkce chybí ** Alternativy se zaměřují na rychlé hledání souborů i externí zdroje ** Mnohé mohou vyhledávání ve Windows kompletně nahradit

18.  2.  2017 | Stanislav Janů | 58

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 | 217


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