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 9167×

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ů

18.6.2018 0:43 /František Kučera

Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.


Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

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

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

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