èablony

Zßkladem ka₧dΘho stylu jsou Üablony. Jejich zßkladnφ tvar je:

<xsl:template match="v²raz">
   t∞lo Üablony
</xsl:template>

T∞lo Üablony p°itom p°esn∞ definuje, jak se Φßsti transformovanΘho dokumentu vyhovujφcφ v²razu budou zpracovßvat. V t∞le Üablony m∙₧eme pou₧φvat dalÜφ konstrukce XSLT nebo p°φmo elementy z v²slednΘho dokumentu û nejΦast∞ji tedy HTML tagy, proto₧e generujeme HTML k≤d.

Mezi dva nejpou₧φvan∞jÜφ p°φkazy, kterΘ se pou₧φvajφ uvnit° Üablony, pat°φ value-of a apply-templates. Abychom pochopili k Φemu se majφ pou₧φvat a jak² je mezi rozdφl, musφme nejprve v∞d∞t, v jakΘm po°adφ se zpracovßvajφ jednotlivΘ Üablony.

XSLT procesor na zaΦßtku svΘ prßce naΦte do pam∞ti vstupnφ XML dokument a vytvo°φ si jeho stromovou reprezentaci (obrßzek 3). Tento strom je pak postupn∞ prochßzen od ko°ene v po°adφ v jakΘm jsou elementy obsa₧eny v dokumentu (jednß se tedy o pr∙chod do hloubky). V okam₧iku, kdy je nalezena Üablona odpovφdajφcφ uzlu ve stromu, zaΦne se jejφ obsah zapisovat na v²stup. D∙le₧itΘ je, ₧e dalÜφ potomci uzlu, pro kter² byla vybrßna Üablona, u₧ nejsou dßl automaticky zpracovßvßni. Pokud tak chceme uΦinit, musφme uvnit° Üablony pou₧φt instrukci <xsl:apply-templates/>. Ta °φkß, ₧e se mß danß v∞tev stromu zpracovßvat dßle a majφ se pro jejφ uzly hledat odpovφdajφcφ Üablony.

Pokud chceme v t∞le Üablony pou₧φt jen textov² obsah n∞jakΘho elementu a jeho podelement∙, ale nechceme aplikovat dalÜφ Üablony, hodφ se instrukce <xsl:value-of select="v²raz"/>. Ta vybere pouze obsah textov²ch uzl∙, kterΘ jsou potomky elementu urΦenΘho pomocφ v²razu (ten je op∞t zapsßn pomocφ syntaxe XPath).

V n∞kter²ch p°φpadech je jedno, kterou mo₧nost pou₧ijeme. Budeme-li chtφt, aby se nßzev firmy na faktu°e zobrazoval tuΦn∞ (HTML tag <b>), mßme dv∞ mo₧nosti, jak toho dosßhnout.

<xsl:template match="nazev">
  <b><xsl:value-of select="."/></b>
</xsl:template>

<xsl:template match="nazev">
  <b><xsl:apply-templates/></b>
</xsl:template>

Pokud vÜak pot°ebujeme zpracovßvat slo₧it∞jÜφ a vno°enΘ struktury, je v∞tÜinou p°ehledn∞jÜφ, kdy₧ pou₧ijeme opakovanΘ aplikovßnφ Üablon. Oba dva p°φstupy jsou ilustrovßny v p°φklad∞ 1.

P°φklad 1. Styl pro p°evod XML faktury do formßtu HTML

<?xml version="1.0" encoding="windows-1250"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		version="1.0">

<xsl:template match="/">
  <html>
    <head>
      <title>Faktura │■slo: <xsl:value-of select="faktura/@cislo"/></title>
    </head>
    <body>
      <table border="1" width="100%">
        <tr valign="top">
          <td rowspan="4">
            <xsl:apply-templates select="faktura/dodavatel"/>
          </td>
	  <td align="right">
            <xsl:value-of select="faktura/@cislo"/>
          </td>
        </tr>
        <tr valign="top">
          <td>
            <xsl:apply-templates select="faktura/odberatel"/>
          </td>
        </tr>
        <tr valign="top">
          <td>Datum vystaven■: 
            <xsl:value-of select="faktura/@vystaveni"/>
          </td>
        </tr>
        <tr valign="top">
          <td>Datum splatnosti: 
            <xsl:value-of select="faktura/@splatnost"/>
          </td>
        </tr>
        <tr>
	  <td colspan="2">
	    <table border="0" width="100%">
	      <xsl:apply-templates select="faktura/polozka"/>
	    </table>
          </td>
        </tr>
      </table>
    </body>
  </html>
</xsl:template>

<xsl:template match="dodavatel">
  <p><b><i>Dodavatel:</i></b></p>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="odberatel">
  <b><i>Odb↓ratel:</i></b><br/>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="nazev">
  <b><xsl:apply-templates/></b><br/>
</xsl:template>

<xsl:template match="adresa">
  <xsl:apply-templates/><br/>
</xsl:template>

<xsl:template match="ico">
  I￈O: <xsl:apply-templates/><br/>
</xsl:template>

<xsl:template match="dic">
  DI￈: <xsl:apply-templates/><br/>
</xsl:template>

<xsl:template match="polozka">
  <tr>
    <td>
      <xsl:value-of select="popis"/>
    </td>
    <td align="right">
      DPH <xsl:value-of select="dph"/>
    </td>
    <td align="right">
      <xsl:value-of select="cena"/>
      <xsl:text> </xsl:text>
      <xsl:value-of select="cena/@mena"/>
    </td>
  </tr>
</xsl:template>

</xsl:stylesheet>

Obrßzek 4. V²sledek aplikovßnφ stylu v prohlφ₧eΦi

⌐ Ji°φ Kosek 2000-2001