ProgramatorCZ  |   Diskusní fórum  |   ASMDprojekt  |   Vtipy  |   JavaScript
Spolupracujeme:   WebGuru  |   Komplikátor  |   MinaSite Přidat k oblíbeným položkám  |   Nastavit jako výchozí stránku
Časopis
Hlavní stránka
Assembler
C,C++
Delphi
DOTNET
Flash
HTML
Java
JavaScript
Knihy
O Internetu
Pascal
PHP
Pro. programátor
Programy
Python
Tiskové zprávy

Projekty

JScript Planet
ProProjekty

Služby

Monitoring

Informace
Redakce
O časopisu
Odkazy
Nový redaktor


ISSN 1213-7359

Šéfredaktor:
Jan Sova

Zástupci šéfredaktora
Frerenzy Dawid
Krásenský David

Šéfredaktoři rubrik
Michal Chalupník
Formánek Jiří
Pavel Aleš
Sojka Zdeněk
Petr Rympler

Administrátor
Jan Sova

Naše ikonka
MinaSite
Komplikátorovy Stránky
TOPlist
GALACTICA

Časopis používá redakční systém Sova-Press.



Práce s XML v C# (4.) - třídy XmlDocument a dotazy jazyka XPath v rubrice DOTNET

V dnešním dílu seriálu se naučíme pracovat s XML pomocí třídy XmlDocument a vyhledávat pomocí dotazů v jazyce XPath uzly splňující zadané podmínky.

Třída XmlDocument představuje dokument jako obrácený strom uzlů, kořenový element je na vrcholu. Ve srovnání s třídou XmlTextReader je paměťově velmi náročná, protože v paměti je po celou dobu celý strom uzlů. Každý uzel je instancí třídy XmlNode, definující metody a vlastnosti pro procházení stromy DOM, čtení a zápis obsahu uzlů, přidávání a odstraňování uzlů a další. Umožňuje modifikovat již existující XML dokumenty, ale ne vytvářet nové. Třída je odvozena od třídy XmlNode, doplňuje k ní vlastní metody a vlastnosti podporující nahrávání a ukládání dokumentů, vytváření nových uzlů a další operace. Podobně jako XmlTextReader zpracovává atributy uzlů způsobem odlišným od zpracování ostatních uzlů. Standardně ignoruje uzly s označením Whitespace (nevýznamné prázdné znaky mezi tagy), pokud je chceme zpracovávat, je nutno nastavit vlastnost PreserveWhitespace objektu XmlDocument na true ještě před voláním metody Load(). Pro vyhledání určitého uzlu není nutné procházet všechny uzly od začátku jako při použití třídy XmlTextReader, ale lze použít metody GetElementsByTagName(), SelectNodes() nebo SelectSingleNode().

    Nejdůležitější metody a vlastnosti třídy XmlDocument:
  • DocumentElement – odkaz XmlNode na dokumentový element (počáteční bod navigace stromu DOM),
  • Load("název XML") – načtení XML,
  • GetElementsByTagName("název tagu") – vrátí kolekci uzlů daného názvu tagu,
  • GetElementById("id elementu") – vrátí element zadaného ID.
    Nejdůležitější metody a vlastnosti třídy XmlNode:
  • NodeType – typ aktuálního uzlu (může být jedna z těchto hodnot: Atribute, CDATA, Comment, Document, DocumentFragment, DocumentType, Element, EndElement, EndEntity, Entity, EntityReference, None, Notation, ProcessingInstruction, SignificantWhitespace, Text, Whitespace, XmlDeclaration),
  • HasChildNodestrue, pokud aktuální uzel má nějaké poduzly (děti),
  • ChildNodes – kolekce poduzlů (dětí) aktuálního uzlu,
  • SelectNodes("výraz jazyka XPath") – vrátí množinu uzlů vyhovujících zadané podmínce,
  • SelectSingleNode("výraz jazyka XPath") – vrátí první uzel vyhovující zadané podmínce.

Příklad: Z XML souboru hraci.xml vypište pro všechny korespondenční šachisty jejich jméno, příjmení a ELO.

Vytvoření XmlDocumentu a načtení souboru:
XmlDocument xml = new XmlDocument();
xml.Load("hraci.xml");

Provedení dotazu XPath:
XmlElement koren = xml.DocumentElement;
String sXPathDotaz = "//hraci/hrac[@sport=\"korespondenční šach\"]";
XmlNodeList seznamUzlu = koren.SelectNodes(sXPathDotaz);

Vypsání hodnot požadovaných uzlů:
foreach (XmlNode uzel in seznamUzlu)
{
   if (uzel.HasChildNodes)
   {
      XmlNodeList deti = uzel.ChildNodes;
      foreach (XmlNode dite in deti)
         if ((dite.Name.Equals("jmeno")) ||
             (dite.Name.Equals("prijmeni")) ||
             ((dite.Name.Equals("elo"))))
            Console.WriteLine(dite.Name + ": " + dite.InnerText);
   }

   Console.WriteLine("");
}

Kompletní text zdrojového příkladu si můžete stáhnout zde.

V příštím pokračování se seznámíme s prací s XML pomocí třídy XmlValidatingReader.

Autor: Anna Rývová e-mail: anna.ryvova@volny.cz web:

Příspěvky ke článku

Ke článku nejsou komentáře
Přidat komentář

Poslední ze stejné rubriky

Práce s událostmi v .NET Framework.
Práce v .NET Framework - Zástupci
Práce s XML v C# (5.) - ověřování dokumentu pomocí třídy XmlValidatingReader
Práce s XML v C# (3.) - třída XmlTextWriter
Práce s XML v C# (2.) - třída XmlTextReader

Funkce ke článku
Přidat komentář

Nejnovější články
Práce s událostmi v .NET Framework. [18076]
Nová soutěž na 3D Contestu CZ [13665]
Práce v .NET Framework - Zástupci [15984]
Práce s XML v C# (5.) - ověřování dokumentu pomocí třídy XmlValidatingReader [14025]
Práce s XML v C# (4.) - třídy XmlDocument a dotazy jazyka XPath [19423]


O článku
Datum: 14.02.2004
Rubrika: DOTNET
Čtenářů: 19423
Autor: Anna Rývová

Hodnocení článku:
Znamka: 2.82
Počet známek: 3171
[1] [2] [3] [4] [5]

 


(c) Systém Jan Sova, Design David Krásenský a Jan Sova
Se svými dotazy či problémy se obracejte na diskusní fórum.
Časopis je součástí projektu Programator