|  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 12578×
 
      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:commentaxsl:processing-instruction. 
      Element xsl:elementnám umožňuje vložit do výstupu
      libovolný element, pomocí jeho atributunameurčíme 
      jeho jméno, prostřednictvímnamespaceurčíme adresu 
      URI jmenného prostoru a pomocí atributuuse-attribute-setsmůž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 
      atributechnameanamespacepoužít výraz 
      ve složenných závorkách a určovat jejich hodnotu za běhu. 
      Elementem xsl:attributemůžeme nastavovat atributy 
      elementů na hodnotu šablony. Atributynameanamespacejsou stejné jako u elementuxsl: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ímxsl: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 elementxsl:attributeuvnitř konstrukce typuxsl:for-each(ačkoli si příliš nedovedu představit 
      rozumné využití této vlastnosti). 
      Související element xsl:attribute-setná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:attributekteré pojmenovává. Atributnameje právě toto jméno, v atributuuse-attribute-setsmůž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-setspřipojit sadu nebo sady k elementůmxsl:elementneboxsl:copy. Taktéž můžeme 
      tyto atributy připojit pomocí speciálnío atributuxsl:use-attribute-setspří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 
      elementyxsl:attributevyhodnocují 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 elementuxsl:attribute. 
      Také můžeme generovat komentáře a instrukce pro zpracování 
      prostřednictvím elementů xsl:commentaxsl:processing-instruction. V obou případech se obsah 
      elementu použije jako obsah výsledného komentáře nebo instrukce, 
      pro elementxsl:processing-instructionmusíme uvést 
      také atributname, který určí to, čemu XSLT říká název 
      a XML identifikátor cíle ^_~. 
      Prostřednictvím elementu xsl:textmůž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 
      atributudisable-output-escapingna"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říkladtext/htmlneboapplication/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"standaloneve 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 methodu 
      elementuxsl:output. Verze pro tisk 
   
 
 
|  |  
| 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ů
 28.11.2018 23:56 /František KučeraProsincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
 Komentářů: 1
 12.11.2018 21:28 /Redakce Linuxsoft.cz22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
 Přidat komentář
 6.11.2018 2:04 /František KučeraŘíjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
 Přidat komentář
 4.10.2018 21:30 /Ondřej ČečákLinuxDays 2018 již tento víkend, registrace je otevřená.
 Přidat komentář
 18.9.2018 23:30 /František KučeraZářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
 Přidat komentář
 9.9.2018 14:15 /Redakce Linuxsoft.cz20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti  mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
 Přidat komentář
 12.8.2018 16:58 /František KučeraSrpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
 Přidat komentář
 16.7.2018 1:05 /František KučeraČervencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
 Přidat komentář
 
   Více ...
  Přidat zprávičku
 
  Poslední diskuze 31.7.2023 14:13 /
Linda GrahamiPhone Services
 30.11.2022 9:32 /
Kyle McDermottHosting download unavailable
 13.12.2018 10:57 /
Jan MarešRe: zavináč
 2.12.2018 23:56 /
František KučeraSraz
 5.10.2018 17:12 /
Jakub KuljovskyRe: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
 
Více ...
 |