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

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

** Microsoft pomalu začíná kritizovat svůj nejpopulárnější OS ** Chce konečně dostat podniky na Desítky ** Bezpečnostní podpora Sedmiček vydrží ještě necelé tři roky

17.  1.  2017 | Jakub Čížek | 405

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

** Dva týdny po Novém roce zajím zeje prázdnotou ** Ministerstvo vydalo metodický pokyn ** Takhle to bude fungovat v praxi

16.  1.  2017 | Jakub Čížek | 49

8 produktů, o kterých byste neřekli, že nesou značku Apple

8 produktů, o kterých byste neřekli, že nesou značku Apple

** Věděli jste, že Apple vyvinul celkem 45 modelů tiskáren? ** ** Monitor na výšku, plotter nebo herní konzole - to vše měl Apple ve své nabídce ** Většinu z těchto produktů pohřbil Steve Jobs

19.  1.  2017 | Stanislav Janů | 38

Opera Neon: Takto prý bude vypadat prohlížeč budoucnosti. Chcete to?

Opera Neon: Takto prý bude vypadat prohlížeč budoucnosti. Chcete to?

** Opera představila Neon ** Koncepci prohlížeče budoucnosti ** Připomíná Chrome OS

16.  1.  2017 | Jakub Čížek | 35


Aktuální číslo časopisu Computer

99 nejlepších programů pro váš počítač

Zvykejte si na umělou inteligenci

Velké testy PC zdrojů a gamepadů

Alternativní zdroje energie

reklama
reklama