Režimy zpracování

  • v praxi často potřebujeme jednotlivé části dokumentu XML zpracovat několikrát různými způsoby

  • pro jeden uzel můžeme mít více šablon odlišených pomocí režimu

    <xsl:template match="…" mode="režim">
  • při volání šablon můžeme určit režim, v jakém se mají šablony hledat

    <xsl:apply-templates mode="režim"/>
  • speciální názvy režimů – #all (vyhoví všem režimům), #default (výchozí režim, tj. žádný), #current (režim právě prováděné šablony)

Příklad 8. katalog-rezimy.xsl

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

  <xsl:output method="html" encoding="utf-8"/>
  
  <xsl:template match="/">
    <html>
      <head>
        <title>Katalog <xsl:value-of select="/katalog/info/firma"/></title>
      </head>
      <body>
        <h1>Katalog <xsl:value-of select="/katalog/info/firma"/></h1>
        
        <table WIDTH="100%" BORDER="1">
          <xsl:apply-templates select="/katalog/polozka"/>
        </table>
        
        <xsl:apply-templates select="/katalog/polozka" mode="detailni"/>       
      </body>
    </html>
  </xsl:template>
  
  <xsl:template match="polozka">
    <tr>
      <xsl:apply-templates select="nazev|kategorie|cena"/>
    </tr>
  </xsl:template>
  
  <xsl:template match="nazev">
    <th><xsl:apply-templates/></th>
  </xsl:template>
  
  <xsl:template match="kategorie">
    <td align="right"><xsl:apply-templates/></td>
  </xsl:template>
  
  <xsl:template match="cena">
    <td align="right"><xsl:apply-templates/></td>
  </xsl:template>

  <xsl:template match="polozka" mode="detailni">
    <xsl:apply-templates mode="detailni"/>
    <hr/>
  </xsl:template>
  
  <xsl:template match="nazev" mode="detailni">
    <h2><xsl:apply-templates mode="detailni"/></h2>
  </xsl:template>

  <xsl:template match="kategorie" mode="detailni">
    <em><xsl:apply-templates mode="detailni"/></em>
  </xsl:template>

  <xsl:template match="cena" mode="detailni">
    <strong> - <xsl:apply-templates mode="detailni"/></strong>
  </xsl:template>

  <xsl:template match="popis" mode="detailni">
    <p><xsl:apply-templates mode="detailni"/></p>
  </xsl:template>

  <xsl:template match="br" mode="detailni">
    <br/>
  </xsl:template>
  
</xsl:stylesheet>