Výstup do více souborů

  • výstup generovaný uvnitř instrukce xsl:result-document se zapisuje do samostatného souboru

  • jméno souboru se určuje v atributu href

  • v atributu href je možné používat AVT

Příklad 12. katalog-soubory.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"/>

  <!-- Do hlavního souboru se uloží úvodní stránka s obsahem -->
  <xsl:template match="/">
    <xsl:result-document href="katalog.html">
      <html>
        <head>
          <title>Katalog <xsl:value-of select="katalog/info/firma"/></title>
        </head>
        <body>
          <h1>Katalog 
              <xsl:value-of select="katalog/info/firma"/></h1>
          
          <!-- Vygenerování tabulky s obsahem -->
          <table border="1">
            <tr>
              <th>Název</th>
              <th>Cena</th>
            </tr>
            <xsl:for-each select="katalog/polozka">
              <tr>
                <td>
                  <a href="{generate-id()}.html">
                    <xsl:value-of select="nazev"/>
                  </a>
                </td>
                <td>
                  <xsl:value-of select="cena"/>
                </td>
              </tr>              
            </xsl:for-each>
          </table>

          <!-- Zpracování všech položek pomocí dalších šablon -->
          <xsl:apply-templates select="katalog/polozka"/>       
        </body>
      </html>
    </xsl:result-document>    
  </xsl:template>
  
  <!-- Každá položka se uloží do samostatného souboru -->
  <xsl:template match="polozka">
    <xsl:result-document href="{generate-id()}.html">
      <html>
        <head>
          <title><xsl:value-of select="nazev"/></title>
        </head>
        <body>
          <xsl:apply-templates/>
          <p align="center"><a href="katalog.html">Zpět</a></p>
        </body>
      </html>
    </xsl:result-document>
  </xsl:template>
  
  <xsl:template match="nazev">
    <h2><xsl:apply-templates/></h2>
  </xsl:template>
  
  <xsl:template match="kategorie">
    <em><xsl:apply-templates/></em>
  </xsl:template>
  
  <xsl:template match="cena">
    <strong> - <xsl:apply-templates/></strong>
  </xsl:template>
  
  <xsl:template match="popis">
    <ul>
      <xsl:for-each-group select="node()" group-starting-with="br">
        <li>
          <xsl:apply-templates select="current-group()"/>
        </li>
      </xsl:for-each-group>
    </ul>
  </xsl:template>
  
  <xsl:template match="b">
    <font color="red"><xsl:apply-templates/></font>
  </xsl:template>
  
</xsl:stylesheet>