<p id='prepend'>Do v²stupu XSL transformace obvykle pot°ebujeme vlo₧it na r∙znß mφsta vybranß data ze vstupnφho dokumentu. V tomto Φlßnku se seznßmφme s n∞kolika XSLT instrukcemi, kterΘ slou₧φ prßv∞ ke vklßdßnφ dat, a nauΦφme se je efektivn∞ vyu₧φvat.</p>
<h3>Pou₧itφ v²chozφch Üablon</h3>
<p>NejjednoduÜÜφ mo₧nostφ, jak p°enΘst data ze vstupu na v²stup, je zavolßnφ <samp><apply-templates/></samp>, p°iΦem₧ m∙₧eme p°idat nepovinn² parametr <samp>select</samp>, kter²m vybereme ve vstupnφm dokumentu uzel, odkud se bude Φerpat. Pokud pro XML elementy na vstupu nejsou definovßny vhodnΘ Üablony, pou₧ijφ se Üablony v²chozφ, kterΘ se postarajφ o p°ekopφrovßnφ <strong>textovΘho obsahu</strong> vybranΘho uzlu. To m∙₧e b²t Φasto v²hodnΘ, proto₧e autor vstupnφho dokumentu m∙₧e text obohatit o libovolnΘ mno₧stvφ sΘmantick²ch znaΦek uspo°ßdan²ch do libovolnΘ struktury - vy si ale p°i transformaci zpracujete vlastnφmi Üablonami pouze vßmi vybranΘ znaΦky a zbytek se zahodφ, p°iΦem₧ se ale v₧dy vyu₧ije textov² obsah.</p>
<p>N∞kdy pot°ebujeme takto zpracovat ·pln∞ cel² vstupnφ dokument, v tom p°φpad∞ nemusφme vytvß°et Üablonu pro ko°enov² element (<samp><xsl:template match="/"></samp> ... <samp></xsl:template></samp>) a pak se i pro tento element pou₧ijφ v²chozφ Üablony. Vφce podrobnostφ o tomto zp∙sobu zpracovßnφ vstupnφho dokumentu jste se mohli doΦφst v <a href='http://interval.cz/clanek.asp?article=3338' title='B°φza, Petr: Kompletnφ pr∙vodce XSLT - Üablony'>p°edchozφm Φlßnku</a>, kter² pojednßvß o vytvß°enφ Üablon a jejich zpracovßnφ XSLT procesorem.</p>
<h3>Hodnota v²razu (xsl:value-of)</h3>
<p>Nechceme-li zpracovßvat urΦit² fragment ₧ßdn²mi Üablonami, lze pou₧φt instrukci <samp>xsl:value-of</samp>, kterß slou₧φ pro vklßdßnφ textov²ch dat. Jejφ parametr <samp>select</samp> obsahuje XPath v²raz, kter² je procesorem vyhodnocen, p°eveden na °et∞zec (je-li t°eba) XPath funkcφ <a href='http://www.w3.org/TR/xpath#function-string'>string()</a> a vlo₧en na v²stup. XML uzly se p°evßdφ na °et∞zec tak, ₧e se vytßhne op∞t pouze jejich textov² obsah, efekt m∙₧e b²t tedy podobn² tomu v p°edchozφm p°φpad∞.</p>
<p>P°i vklßdßnφ text∙ XSLT procesor vÜechny rezervovanΘ znaky zak≤duje do p°φsluÜn²ch XML/HTML entit, tedy nap°φklad znak <samp>&</samp> (kter² je ve vstupnφm dokumentu zapsßn jako <samp>&</samp>) je nahrazen op∞t zßpisem <samp>&</samp>. Toto chovßnφ nemusφ b²t v₧dy ₧ßdoucφ, a proto jej lze vypnout nastavenφm parametru <samp>disable-output-escaping</samp> na hodnootu <samp>"yes"</samp>. Pak jsou vÜechny znaky zkopφrovßny p°esn∞ tak, jak jsou rozk≤dovßny a vyta₧eny ze vstupu.</p>
<h3>Kopφrovßnφ uzl∙ (xsl:copy, xsl:copy-of)</h3>
<p>Samoz°ejm∞ ne v₧dy nßs zajφmß pouze textov² obsah, m∙₧eme takΘ chtφt kopφrovat XML uzly ze vstupu. Jsou dv∞ mo₧nosti, jak to provΘst, kterΘ se liÜφ v tom, zda chceme kopφrovat pouze jeden uzel nebo hned celou strukturu.</p>
<h4>Kopφrovßnφ jednoho uzlu (xsl:copy)</h4>
<p>Instrukce <samp>xsl:copy</samp> zkopφruje na v²stup pouze aktußlnφ uzel. Jde-li o XML element, nekopφrujφ se automaticky jeho atributy! Pokud mß element ve v²sledku obsahovat n∞jakΘ dalÜφ uzly, musφ b²t p°φsluÜnΘ elementy (nebo instrukce, kterΘ je vytvo°φ) vlo₧eny dovnit° do tΘto instrukce, tedy mezi znaΦky <samp><xsl:copy></samp> a <samp></xsl:copy></samp>.</p>
<h4>Kopφrovßnφ vÜech uzl∙ (xsl:copy-of)</h4>
<p>Instrukce <samp>xsl:copy-of</samp> mß povinn² parametr <samp>select</samp> (jak jinak), kter² je vyhodnocen a jeho₧ v²sledek je zkopφrovßn do v²stupu jako cel² XML fragment.</p>
<h3>èablony hodnot atribut∙</h3>
<p>Atributy k element∙m v Üablonßch m∙₧eme samoz°ejm∞ zapisovat naprosto b∞₧n²m zp∙sobem p°φmo do t∞chto element∙. Je tady vÜak mo₧nost zßpisu XPath v²raz∙ do hodnot t∞chto atribut∙, a to pomocφ slo₧en²ch zßvorek (<samp>{</samp> a <samp>}</samp>). VÜe osv∞tlφ naprosto jednoduch² p°φklad:</p>
<div class='sample'>
<img src="{/config/path}/obrazek.gif" />
</div>
<p>Text ve slo₧en²ch zßvorkßch (<samp>/config/path</samp>) se vyhodnotφ, tedy nalezne se p°φsluÜn² uzel ze vstupu, vytßhne se jeho °et∞zcovß hodnota a doplnφ se zbytkem hodnoty atributu (<samp>/obrazek.gif</samp>). Lze tak velice snadno pou₧φvat data ze vstupnφho dokumentu jako atributy libovoln²ch element∙.</p>
<h3>Vytvß°enφ element∙ (xsl:element)</h3>
<p>Do v²stupu lze vklßdat elementy jejich jednoduch²m vlo₧enφm na sprßvnΘ mφsto do Üablony v transformaΦnφm stylu. Co kdy₧ ale nßzev elementu p°edem neznßme? I na tuto situaci je pamatovßno. Existuje znaΦka <samp>xsl:element</samp>, jejφ₧ atribut <samp>name</samp> je °et∞zec, urΦujφcφ v²sledn² nßzev elementu. Tento parametr lze zapsat stejn∞ jako Üablony atribut∙, tedy lze zapisovat XPath v²razy ve slo₧en²ch zßvorkßch. M∙₧eme takΘ definovat jmenn² prostor pomocφ parametru <samp>namespace</samp>. Pokud mß mφt element atributy nebo dalÜφ pod°φzenΘ elementy, jsou tyto uzly vlo₧eny do t∞la instrukce, tedy mezi otevφracφ a uzavφracφ tag. Zde je mo₧nΘ volat jinΘ Üablony a pou₧φvat jakΘkoli jinΘ XSLT instrukce.</p>
<div class='sample'>
<xsl:element name="{$BlockElement}">
<br /> <xsl:apply-templates />
<br /></xsl:element">
</div>
<h3>Vytvß°enφ atribut∙ (xsl:attribute)</h3>
<p>Tato instrukce vytvo°φ k nad°φzenΘmu elementu atribut. Nßzev a jmenn² prostor jsou dßny op∞t v parametrech <samp>name</samp> a <samp>namespace</samp>, op∞t lze vyu₧φt XPath v²razy ve slo₧en²ch zßvorkßch. Takto lze p°idßvat atributy nejen ke znaΦkßm vlo₧en²m pomocφ <samp>xsl:element</samp>, ale takΘ k element∙m zapsan²m p°φmo. Tedy nap°φklad lze zapsat:</p>
<p>Jak jste si jist∞ vÜimli, hodnota atributu se vklßdß do t∞la instrukce. Pokud chcete tuto hodnotu vyjßd°it n∞jak²m XPath v²razem, nenφ problΘm vyu₧φt instrukci <samp>xsl:value-of</samp>. Rovn∞₧ je mo₧nΘ uvnit° tΘto instrukce volat jinΘ Üablony s tφm, ₧e v²sledek jejich zpracovßnφ bude p°eveden na °et∞zec a vlo₧en do hodnoty vytvß°enΘho atributu. Pokud k jednomu elementu vytvo°φte n∞kolik stejnojmenn²ch atribut∙, procesor aplikuje pouze prvnφ a zbytek bude ignorovßn. VÜechny atributy musφ b²t definovßny d°φve ne₧ prvnφ pod°φzen² element, pokud bude n∞jak² atribut definovßn pozd∞ji, m∞l by jej XSLT procesor ignorovat.</p>
<h3>Skupinu atribut∙ (xsl:attribute-set)</h3>
<p>V XSLT lze definovat skupinu atribut∙ pomocφ znaΦky <samp>xsl:attribute-set</samp>, kterß se zapisuje do nejvyÜÜφ ·rovn∞ XSLT dokumentu, p°φmo do znaΦky <samp>xsl:stylesheet</samp>, je pojmenovanß n∞jak²m unikßtnφm nßzvem a obsahuje mno₧inu n∞kolika atribut∙. VÜechny tyto atributy pak budou snadno pou₧itelnΘ pod jednφm spoleΦn²m nßzvem. Mal² p°φklad vΦetn∞ ukßzky vyu₧itφ:</p>
<p>Takto vytvo°en² a pojmenovan² soubor atribut∙ lze snadno pou₧φt kdekoli je to pot°eba pomocφ <samp>xsl:use-attribute-sets</samp> (p°i pou₧itφ v XSL instrukci samoz°ejm∞ prefix <samp>xsl:</samp> nemusφme uvßd∞t).</p>
<h3>Vytvß°enφ textov²ch uzl∙ (xsl:text)</h3>
<p>TextovΘ uzly lze krom∞ p°φmΘho zßpisu a ostatnφmi instrukcemi vklßdat takΘ specißlnφ instrukcφ <samp>xsl:text</samp>, jejφ₧ atribut <samp>disable-output-escaping</samp> nastaven² na <samp>"yes"</samp> zakß₧e k≤dovßnφ znak∙ entitami podobn∞, jako u instrukce <samp>xsl:value-of</samp>. Obsah tΘto instrukce nenφ fragment Üablony, ale musφ b²t zapsßn p°φmo - nesmφ obsahovat ₧ßdnΘ dalÜφ XSLT instrukce.</p>
<p>Komentß°e lze do v²sledk∙ vklßdat pomocφ instrukce <samp>xsl:comment</samp>. T∞lem instrukce m∙₧e b²t op∞t cokoli, v²sledek zpracovßnφ je pak vlo₧en jako obsah komentß°e.</p>
<h3>Shrnutφ</h3>
<p>Na zßv∞r si uvedeme p°ehlednou tabulku, kterß shrnuje vÜechny prvky jazyka XSLT, kter²mi lze vytvß°et v²sledn² dokument (result tree). èablona jako obsah prvku znamenß, ₧e obsahem m∙₧e b²t libovoln² fragment XSLT Üablony a takΘ je tak vyhodnocen.</p>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3380'>VyΦiÜt∞nφ tabulky z MS Wordu v MSIE JavaScriptem</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3383'>Kompletnφ pr∙vodce XSLT - °φzenφ toku transformace</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3385'>èt∞pßnka Sunkovß: Jeden za vÜechny, vÜichni za jednoho</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3379'>SMARTY - cache, WAP a bezpeΦnost</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3381'>╚eskß on-line reklama - internet a chu¥ na bagety</a></li>
</ul>
</div>
</div>
<div class='page-right-box cauldron'>
<h3>Diskuznφ kotel</h3>
<div class='page-right-box-in'>
<ul>
<li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3357' title='(57 komentß°∙)'>Se°azenφ tabulky JavaScriptem snadno a rychle</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3363' title='(29 komentß°∙)'>JavaScript, programujeme internetovΘ aplikace</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3364' title='(29 komentß°∙)'>Kam pat°φ menu</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3368' title='(20 komentß°∙)'>Eric Meyer o CSS - Ovlßdn∞te kaskßdovΘ styly!</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3380' title='(16 komentß°∙)'>VyΦiÜt∞nφ tabulky z MS Wordu v MSIE JavaScriptem</a></li>