LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Programujeme s XML (17.) - Funkce v XSLT

XSLT zavádí do jazyka XPath několik nových funkcí, dnes se podíváme, co dělají.

30.9.2004 09:00 | Aleš Hakl | Články autora | přečteno 5088×

Většina funkcí, kterými XSLT rozšiřuje jazyk XPath, slouží ke zjišťování různých parametrů XSLT procesoru. Ovšem pak zde nalezneme i jiné funkce, které rozšiřují jazyk XPath o funkcionalitu, která mu chybí a je pro použití v XSLT vhodná, a nebo o záležitosti nemající smysl mimo XSLT.

current()

Tato funkce vrací sadu uzlů obsahující jednu položku: takzvaný nynější uzel ("current node", což je něco jiného než "context node", který jsem v dřívějších dílech pro jednoduchost nazýval aktuální). Například uvnitř xsl:for-each nebo xsl:template vrací tato funkce uzel, který je právě ve smyčce zpracováván, respektive způsobil vyvolání šablony.

document()

Tato funkce nám umožní načíst sadu uzlů z dalšího vstupního dokumentu, podrobněji se jí budeme zabývat v příštím díle.

element-avaiable()

Tato funkce patří do kategorie zjišťování informací o procesoru. Vrátí logickou hodnotu podle toho, je-li dostupný rozšiřující element, jehož jméno je udáno jako řetězec jejím jediným parametrem.

format-number()

Tato funkce je takový kanón na vrabce - slouží k pokročilému formátování čísel. První parametr udává číslo, které se bude formátovat, druhý formátovací řetězec a konečně třetí může obsahovat jméno přiřazené použitému elementu xsl:decimal-format.

Formátovací řetězec má stejnou syntaxi jako formátovací řetězec používaný Javovou třídou DecimalFormat.

Formátovací řetězec se skládá ze dvou částí obsahujících prefix, numerický formát a sufix: jedné pro kladné hodnoty a druhé pro záporné, pokud část pro záporné hodnoty vynecháme, je použita první čast, před kterou je dodán znak mínus (odpovídající národnímu prostředí), pokud ovšem formát záporných čísel uvedeme, jsou v něm brány v potaz pouze prefix a sufix, počet číslic je stejný jako pro kladný formát. Obě části oddělíme znakem ; (středník). Vlastní formát čísla může obsahovat několik speciálních znaků:

  • 0 - Číslice
  • # - Číslice, počáteční nuly jsou vynechány
  • . - Desetinná tečka (nebo čárka...)
  • , - Oddělovač (v našich podmínkách typicky tisíců)
  • - - Mínus
  • E - Oddělovač mantisy a exponentu

V prefixu a sufixu též můžeme použít několik speciálních znaků:

  • % - Vynásobí číslo 100 a znak nahradí znakem procent dle národního prostředí
  • nebo ‰ - Vynásobí číslo 1000 a znak nahradí znakem promile dle národního prostředí
  • ¤ nebo ¤ - Vloží národní znak měny (Kč), pokud tento znak zadáme dvakrát, vloží mezinárodní znak měny (CZK)
  • ' - Používá se k vkládání znaků se speciálním významem do prefixu a sufixu například: "'ID#'", samotný znak ' vložíme tak, že ho zdvojíme: "''''"

Element xsl:decimal-format slouží k nastavení dalších parametrů formátování, umísťuje se přímo do elementu xsl:stylesheet a má tyto atributy:

  • decimal-separator - Znak použitý jako desetinná tečka(formátovací znak .), implicitně "."
  • grouping-separator - Znak pro oddělení skupin číslic (formátovací znak ,), implicitně ","
  • minus-sign - Znak použitý pro mínus.
  • percent - Znak procent (ve formátu znak %), implicitně "%"
  • per-mille - Znak promile (‰ jak ve formátu tak implicitně)
  • zero-digit - Znak pro nulu, implicitně "0"
  • digit - Tento atribut nám umožnuje změnit formátovací znak # na jiný
  • pattern-separator - Tímto atributem můžeme změnit znak použitý pro oddělení dvou částí formátovacího řetězce na něco jiného než ;.
  • infinity - Řetězec vyjadřující nekonečno
  • NaN - řetězec vyjadřující hodnotu NaN

function-avaiable()

Podobně, jako funkce element-avaible() ověřuje dostupnost elementů XSLT, můžeme pomocí této funkce ověřit dostupnost nějaké rozšiřující funkce.

generate-id()

Tato funkce, kterou jsme již použili v patnáctém dílu, vrací unikátní identifikátor uzlu zadaného jako její jediný parametr. Způsob, jakým je tento identifikátor získán, není nijak přesně specifikován a každý procesor používá jiný.

system-property()

Funkcí system-property() můžeme získat hodnotu nějaké vlastnosti procesoru XSLT, název této vlastnosti předáme jako její jediný parametr a návratová hodnota je hodnota dané vlastnosti. Jsou definovány tyto vlastnosti:

  • "xsl:version" - Podporovaná verze jazyka XSLT
  • "xsl:vendor" - Název dodavatele procesoru XSLT
  • "xsl:vendor-uri" - URI dodavatele procesoru XSLT

key()

Pokud chceme vyhledat v dokumentu všechny uzly, u kterých se nějaký výraz jazyka XPath rovná nějaké hodnotě, použijeme element xsl:key a související funkci key(). Funkci key() předáme jako parametry jméno odpovídajícícho elementu xsl:key a požadovanou hodnotu, jako návratovou hodnotu získáme sadu uzlů vyhovujících dané podmínce.

Element xsl:key umístíme přímo do elementu xsl:stylesheet. Tento element nemá žádný obsah, ale zato má tři atributy:

  • name - Název (použitý jako první parametr funkce key())
  • match - Výraz (vzor), kterým vybereme uzly, které nás zajímají (podobně jako u xsl:template)
  • use - Výraz určující hodnotu klíče

unparsed-entity-uri()

Tato funkce slouží ke zjistění adresy URI systémové (nebo též neanalyzované) entity určené názvem předaným jako parametr funkce. Takovéto entity, definované v DTD, slouží většinou k připojení binárních dat k dokumentu XML. Jejich použití vyžaduje DTD a vůbec je zbytečně komplikované, a proto se příliš nepoužívají.

Zde jsme s výčtem funkcí XSLT skončili a příště se podíváme, jak pomocí XSLT zpracovávat více vstupních dokumentů, generovat více výstupních dokumentů nebo jak šablonu rozdělit do více souborů.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků
> Služby
Administrace serverů
Od 350 Kč/hod
Server housing
Od 1000 Kč/1U

30.7.2010 9:06 /MaReK Olšavský
Krátký článek pro pythonýry připomíná zlatá pravidla programování (vztažitelná i na jiné jazyky). Pokračujte odkazem na konci článku :-).
Přidat komentář

29.7.2010 14:39 /Radim Kolář
IBM vydala další z řady publikací pro studenty Getting started with open source development. Probírají se licence, obchodní modely, příklady OSS projektů a jak se zapojit do vývoje. Dodatek je věnován krátkému úvodu k DB2 databázi.
Přidat komentář

29.7.2010 7:44 /MaReK Olšavský
Při procesu akvizice SUN Microsystems Oraclem se mluvilo především o MySQL a Java platformě, ale Oracle získal mnohem více zajímavých produktů se širokou uživatelskou základnou, například VirtualBox, ke kterému má poněkud macešský přístup. Bude tu VirtualBox pro běžné uživatele, nebo se s ním máme pomalu rozloučit?
Komentářů: 1

29.7.2010 7:08 /MaReK Olšavský
Pokud se uživatelé distribucí Fedora a Ubuntu těšili na pozimní vydání, která měla přinést GNOME 3.0, mohou svá očekávání zmírnit, GNOME 3.0 bude opožděno, snad jen do března 2011.
Přidat komentář

28.7.2010 8:49 /MaReK Olšavský
Možná pro někoho může být překvapující, že CentOS má majoritní podíl mezi webservery. „Bezplatný RHEL“ trochu překvapivě předstihl vyzdvihovaný Debian i FreeBSD.
Komentářů: 5

   Více ...   Přidat zprávičku

> Poslední diskuze

29.7.2010 18:24 / Hynek (Pichi) Vychodil
Re: Kým vyzdvihovaný Debian?

29.7.2010 15:29 / Radim Kolář
Re: Ruchlost kompilace

29.7.2010 12:40 / Radim Kolář
Freebsd

29.7.2010 12:35 / Radim Kolář
mne pada

29.7.2010 12:35 / Slavomir
Rychla maska

Více ...

ISSN 1801-3805 | Prague hotels | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2010) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze