XPath a základy XSLT

XPath

  1. Pro zopakování a prohloubení znalostí XPathu si samostatně projděte krátký XPath tutoriál.

  2. Stáhněte si ukázkové dokumenty a styly.

  3. Na ukázkovém dokumentu katalog.xml (případně faktura.xml) si vyzkoušejte některé z následujících dotazů. Pro testování výrazů XPath můžete použít buď nástroje zabudované do editoru, nebo interaktivní vyhodnocovač pro IE – xpath-ie/default.htm (resp. xpath-ie/default-ie7.htm pro IE7)

    katalog

    Vybere všechny elementy katalog, které jsou dětmi aktuálního uzlu.

    ./katalog

    Vybere všechny elementy katalog, které jsou dětmi aktuálního uzlu.

    /katalog

    Vybere všechny elementy katalog, které jsou dětmi kořenové uzlu. Takový element může být v dokumentu maximálně jeden a je to kořenový element.

    *

    Vybere všechny elementy, které jsou dětmi aktuálního uzlu.

    katalog/*

    Vybere všechny elementy, které jsou dětmi elementu katalog, který je dítětem aktuálního uzlu.

    text()

    Vybere všechny textové uzly, které jsou dětmi aktuálního uzlu.

    //text()

    Vybere všechny textové uzly v celém dokumentu.

    id('mz-r90')

    Vybere uzel, který má atribut typu ID nastaven na hodnotu mz-r90. Pokud chceme používat funkci id(), musíme mít k dokumentu připojené DTD, ve kterém mají některé z atributů typ ID.[1]

    @href

    Vybere atribut href aktuálního uzlu.

    foto/@href

    Vybere atribut href elementu foto, který je dítětem aktuálního uzlu.

    @*

    Vybere všechny atributy aktuálního uzlu.

    //*[@*]

    Vybere všechny elementy dokumentu, které mají alespoň jeden atribut.

    polozka[1]

    Vybere první element polozka, který je dítětem aktuálního uzlu.

    /katalog/polozka[1]

    Vybere první element polozka, který je dítětem elementu katalog, který je kořenovým elementem dokumentu.

    polozka[last()]

    Vybere poslední element polozka, který je dítětem aktuálního uzlu.

    */nazev

    Vybere všechny elementy nazev, které jsou vnoučaty (dětmi dětí) aktuálního uzlu.

    katalog//cena

    Vybere všechny elementy cena, které jsou potomky elementu katalog, který je dítětem aktuálního uzlu.

    //cena

    Vybere všechny elementy cena, které jsou potomky kořenového uzlu. To v praxi znamená, že jsou vybrány všechny elementy cena, které se nacházejí ve stejném dokumentu jako aktuální uzel.

    .

    Vybere aktuální uzel.

    ..

    Vybere rodiče aktuálního uzlu.

    id('mz-r90')/../info/firma

    Pomocí `..' se lze velice jednoduše pohybovat vzhůru ve struktuře dokumentu.

    //polozka[cena/@dph='5']/popis

    Vybere všechny elementy popis, které jsou dětmi elementu polozka, v případě, že element cena v položce má atribut dph nastaven na 5.

    Lidsky řečeno vybere popis všech položek faktury, které mají 5% sazbu DPH.

    //cena[@dph='5'][2]

    Vybere druhý element cena, z celého dokumentu, který má atribut dph nastaven na hodnotu 5.

    //cena[2][@dph='22']

    Vybere druhý element cena, z celého dokumentu, pouze pokud má zároveň atribut dph nastaven na hodnotu 22. Omezující podmínky v hranatých závorkách jsou tedy vyhodnocovány postupně zleva doprava.

    /katalog/polozka[kategorie='MiniDisc']

    Vybere element polozka, který je dítětem kořenového elementu katalog, pokud obsahuje jako dítě element kategorie s textem MiniDisc.

    self::polozka

    Vybere aktuální uzel, pokud je to element se jménem polozka.

    preceding::*[1]

    Vybere poslední element, který se nachází před aktuálním uzlem.

    preceding-sibling::*[1]

    Vybere poslední element, který se nachází před aktuálním uzlem a je na stejné úrovni (je to sourozenec).

    following::*[1]

    Vybere první element, který se nachází za aktuálním uzlem.

Základy XSLT

  1. Samostatně si vyzkoušejte zpracování XML dokumentu pomocí stylu, jak je popsáno v materiálech.

    Vyzkoušejte si, jak zpracování stylu v prohlížeči, tak spuštění transformace z příkazové řádky.

    Transformace lze spouštět i přímo z prostředí editorů oXygen, XML Spy a jEdit.

  2. Vytvořte vlastní XSLT styl, který převede soubor objednavka.xml do HTML.


[1] Tato funkce proto nebude fungovat nad dokumentem katalog.xml, ale bude fungovat nad dokumentem katalog-s-id.xml, který obsahuje DTD s požadovanou definicí typu atributu.