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

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

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

6.  12.  2016 | Jakub Čížek | 36

11 tipů na dobrý stolní počítač: od základu po herní mašiny

11 tipů na dobrý stolní počítač: od základu po herní mašiny

** Postavte si stolní počítač! Máme pro vás 11 vzorových sestav s rozpisem komponent ** Většina tipů cílí na hráče, věnujeme se ale i základnímu PC a počítačům na střih videa ** Nadělte si nový počítač třeba pod stromeček

5.  12.  2016 | Adam Kahánek | 74

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

** V notebooku s cenou nad 20 tisíc nesmí chybět kvalitní displej a rychlé úložiště ** Za dalších deset tisíc můžete dostat navíc styl nebo výkonnější komponenty ** Vybírat můžete z různých velikostí i konstrukcí

8.  12.  2016 | Stanislav Janů | 87

Technosféra naší Země má už hmotnost 30 bilionů tun

Technosféra naší Země má už hmotnost 30 bilionů tun

** Vědci odhadli přibližné množství strukturu vytvořených člověkem, které jsou na Zemi ** Přibližný odhad je, že tyto struktury mají dohromady hmotnost kolem 30 bilionů tun ** Jak to ovliní biosféru?

Včera | Karel Javůrek | 9


reklama