LINUXSOFT.cz
Nazwa użytkownika: Hasło:     
    CZ UK PL

> 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 | czytane 11857×

RELATED ARTICLES KOMENTARZE   

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.


KOMENTARZE

Nie ma komentarzy dla tej pozycji.

Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
> Szukanie oprogramowania
1. Pacman linux
Download: 4789x
2. FreeBSD
Download: 8979x
3. PCLinuxOS-2010
Download: 8483x
4. alcolix
Download: 10792x
5. Onebase Linux
Download: 9565x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6134x

1. xinetd
Download: 2324x
2. RDGS
Download: 937x
3. spkg
Download: 4539x
4. LinPacker
Download: 9787x
5. VFU File Manager
Download: 3109x
6. LeftHand Mała Księgowość
Download: 6994x
7. MISU pyFotoResize
Download: 2695x
8. Lefthand CRM
Download: 3480x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 2991x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz