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

> Programujeme s XML (15.) - Ovlivňujeme výstup

V minulých dílech jsme si ukázali mnoho možností jazyka XSLT, ale zatím jsme pouze doplňovali text do dokumentu s víceméně statickou strukturou, dnes se tedy podíváme, jak můžeme vytvařet i tuto strukturu pomocí XSLT.

7.9.2004 15:00 | Aleš Hakl | Články autora | přečteno 8685×

První problém, na který nejspíše narazíme, je jak doplnit výsledek výrazu do atributu nějakého elementu. XSLT nám v tomto případě nabízí hned dvě řešení, my se nejprve podíváme na jednodušší možnost:

<a href="#{generate-id()}"> . . .

V hodnotách atributů jsou výrazy jazyka XPath ve složených závorkách automaticky vyhodnoceny, pokud do atributu chceme vložit složené závorky, musíme je zdvojit.

V ukázce jsem použil funkci jazyka XSLT generate-id(), která si zaslouží bližší vysvětlení. Tato funkce vrátí unikatní identifikátor uzlu zadaného jako parametr (nebo aktuálního uzlu). Způsob, jakým je použita v ukázce, je jeden z nejtypičtějších. Vytvářím odkaz v rámci dokumentu pomocí pojmenovaných elementů a.

V jazyce XSLT je ovšem možné vygenerovat do výstupního dokumentu téměř libovolný XML uzel. Můžeme k tomu použít elementy xsl:element, xsl:attribute, xsl:text, xsl:comment a xsl:processing-instruction.

Element xsl:element nám umožňuje vložit do výstupu libovolný element, pomocí jeho atributu name určíme jeho jméno, prostřednictvím namespace určíme adresu URI jmenného prostoru a pomocí atributu use-attribute-sets můžeme použít takzvanou sadu atributů (viz dále). Výsledek je stejný, jako kdybychom takový element přímo uvedli v šabloně, ovšem v tomto případě můžeme v atributech name a namespace použít výraz ve složenných závorkách a určovat jejich hodnotu za běhu.

Elementem xsl:attribute můžeme nastavovat atributy elementů na hodnotu šablony. Atributy name a namespace jsou stejné jako u elementu xsl:element, šablona uvedená uvnitř elementu bude použita jako hodnota výsledného atributu. Element se vždy vztahuje k obsahujícímu elementu výstupu, ať již přímo zapsanému v šabloně nebo vytvořenému prostřednictvím xsl:element. Není možné přidávat atributy poté, co byl do elementu již vložen nějaký obsah (text, jiný element...), ale je možné použít element xsl:attribute uvnitř konstrukce typu xsl:for-each (ačkoli si příliš nedovedu představit rozumné využití této vlastnosti).

Související element xsl:attribute-set nám umožňuje ušetřit si psaní při nastavování spousty stejných atributů (nejužitečnější je to pro XSL:FO). Tento element obsahuje více elementů xsl:attribute které pojmenovává. Atribut name je právě toto jméno, v atributu use-attribute-sets můžeme uvést názvy jiných sad atributů oddělené mezerou, které budou použity jako součást této sady.

Stejným způsobem můžeme použitím atributu use-attribute-sets připojit sadu nebo sady k elementům xsl:element nebo xsl:copy. Taktéž můžeme tyto atributy připojit pomocí speciálnío atributu xsl:use-attribute-sets přímo k elementu zapsanému v šabloně: <nejaky-element xsl:use-attribute-sets="nejaka-sada-atributu" /> Vlastnost, která nemusí být na první pohled zřejmá je, že se elementy xsl:attribute vyhodnocují stejně jako kdybychom je přímo zapsali a výrazy jazyka XPath jsou vyhodnoceny pokaždé znovu, proto můžeme bez problémů používat jakýkoli výraz jazyka XPath který bychom použili normálně v elementu xsl:attribute.

Také můžeme generovat komentáře a instrukce pro zpracování prostřednictvím elementů xsl:comment a xsl:processing-instruction. V obou případech se obsah elementu použije jako obsah výsledného komentáře nebo instrukce, pro element xsl:processing-instruction musíme uvést také atribut name, který určí to, čemu XSLT říká název a XML identifikátor cíle ^_~.

Prostřednictvím elementu xsl:text můžeme do dokumentu vkládat textový obsah. Ačkoli to na první pohled vypadá jako zbytečné, jedná se o jediný spolehlivý způsob, jak do výstupního dokumentu vložit sérii mezer a jak zabránit tomu, aby odsazování XSLT šablony ovlivňovalo výstupní dokument. Také můžeme nastavením atributu disable-output-escaping na "yes" zakázat konverzi znaků <>"'& na entity.

Mnoho ohledně výstupu také ovlivníme prostřednictvím elementu xsl:output, kterého jsme se lehce dotkli v devátém díle. Teď se tedy podíváme na jeho atributy detailněji:

  • cdata-section-elements - Seznam názvů elementů výstupu oddělených mezerami, jejichž textový obsah bude zapsán jako sekce CDATA namísto prostého textu
  • doctype-public - Veřejný identifikátor definice typu dokumentu výstupu.
  • doctype-system - Systémový identifikátor (typicky URI) definice typu dokumentu výstupu.
  • encoding - Preferované kódování výstupu. V případě výstupu jako text by mělo dojít k chybě, pokud se ve výstupu vyskytuje znak, který není možné v tomto kódování vyjádřit.
  • indent - Určuje bude-li bude výstup odsazován.
  • media-type - Typ výstupního dokumentu dle MIME ( například text/html nebo application/xml...).
  • method - Způsob výstupu: "xml", "html" nebo "text"
  • omit-xml-declaration - Pokud je nastaveno na "yes", bude ve výstupu vynechána XML deklarace (<?xml version=...)
  • standalone - Určuje hodnotu "atributu" standalone ve výstupní XML deklaraci.
  • version - Verze XML použitá pro výstup, v současné době má smysl 1.0 a 1.1, přičemž bych předpokládal, že žádný XSLT procesor zatím neumí vlastnosti XML 1.1 využít (a ještě více bych předpokládal, že žádný uživatel nemá důvod vlastnosti XML 1.1 využít ^_~). Pokud zadáme verzi, kterou procesor nepodporuje, bude jednoduše ignorována a použita podporovaná.

Zde dnešní povídání o výstupu z XSLT zakončíme a příště se podíváme na rozdíly mezi různými hodnotami atributu method u elementu xsl:output.

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ů

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

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

> Poslední diskuze

1.8.2017 7:32 / Cassidy
structural consultants

30.7.2017 11:12 / Jaromir Obr
Národní znaky

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

26.7.2017 21:12 / Jaromir Obr
Podminka

15.6.2017 9:34 / Ondřej Havlas
php,

Více ...

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