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>