Potřebujete pomoci s XSLT?
Nabízím školení, konzultace, vývoj XSLT kódu na zakázku. Nevájte a kontaktujte mne.

Podpořte provoz stránek
Platba probíhá pomocí služby PayPal a je možné platit kartou nebo převodem z vašeho PayPal účtu.

12.2 Kombinování různých rozšíření v jednom stylu

Pokud chceme využívat nadstandardní rozšíření, ale přitom vytvořit styl, který bude funkční ve více XSLT procesorech, není to úplně nemožné. XSLT nabízí instrukci <xsl:fallback>. Tu lze vložit do libovolné jiné instrukce. Pokud se jí nepodaří provést, provedou se instrukce uložené v <xsl:fallback>.

Příklad 12.2. Použití <xsl:fallback>katalog-soubory2.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0"
                xmlns:exsl="http://exslt.org/common"
                xmlns:saxon="http://icl.com/saxon"
                extension-element-prefixes="exsl saxon"
                exclude-result-prefixes="exsl saxon">

  <xsl:import href="katalog-obrazky.xsl"/>

  <xsl:template match="/">
    <saxon:output href="katalog.html" method="html">
      <xsl:apply-imports/>
      <xsl:fallback>
        <exsl:document href="katalog.html" method="html">
          <xsl:apply-imports/>
        </exsl:document>
      </xsl:fallback>
    </saxon:output>
  </xsl:template>

  <xsl:template match="nazev">
    <TH>
      <A href="{generate-id(..)}.html">
        <xsl:apply-templates/>
      </A>
    </TH>
  </xsl:template>
  
  <xsl:template match="polozka" mode="detailni">

    <!-- Obsah celého generovaného souboru si uložíme do jedné
         proměnné, protože ho budeme používat opakovaně -->
    <xsl:variable name="content">
      <html>
        <head>
          <title><xsl:value-of select="nazev"/></title>
        </head>
        <body>
          <xsl:apply-imports/>
          <p align="center"><a href="katalog.html">Zpět</a></p>
        </body>
      </html>
    </xsl:variable>

    <!-- Uložíme si i jméno souboru -->
    <xsl:variable name="filename" 
                  select="concat(generate-id(.), '.html')"/>
    
    <!-- Zkusíme vygenerovat nový soubor pomocí Saxonu -->
    <saxon:output href="{$filename}" method="html">
      <xsl:copy-of select="$content"/>
      
      <xsl:fallback>
        <!-- Pokud procesor není Saxon, zkusíme totéž pomocí EXSLT -->
        <exsl:document href="{$filename}" method="html">
          <xsl:copy-of select="$content"/>

          <xsl:fallback>
            <!-- Ostatní procesory generují výstup jen do jednoho
                 souboru -->
            <xsl:copy-of select="$content"/>
          </xsl:fallback>
        </exsl:document>
      </xsl:fallback>
    </saxon:output>
  </xsl:template>
  
</xsl:stylesheet>

© Jiří Kosek 2014

Tento dokument je určen výhradně pro osobní potřebu seznámení s jazykem XSLT. Jakékoliv jiné použití, včetně dalšího šíření, pořizování kopií, použití při školeních a výuce apod. je výslovně zakázáno a bude považováno za porušení autorských práv.


Copyright © 2000-2014 Jiří Kosek