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.

14.4 Uživatelsky definované funkce

V XSLT 2.0 si můžeme pomocí nové instrukce <xsl:function> definovat nové funkce, které pak můžeme volat přímo z výrazu XPath. U funkce můžeme pomocí atributu as určit typ její návratové hodnoty. Podobně můžeme typy určit i pro jednotlivé parametry. Můžeme tak XSLT 2.0 používat jako silně typový jazyk, kde se při volání funkce kontrolují typy předávaných hodnot.

Funkce musí být definována v nějakém jmenném prostoru. Návratová hodnota funkce se většinou určuje pomocí instrukce <xsl:sequence>. Tato nová instrukce může vracet libovolnou posloupnost (reflektuje tedy nový datový typ XPathu 2.0) – tato posloupnost může obsahovat jak hodnoty, tak uzly. Není problém mít posloupnost, která má jen jednu hodnotu. Výhodou této instrukce je právě to, že může vracet otypované hodnoty nebo uzly původního dokumentu. Pokud jsme funkce simulovali v XSLT 1.0 pomocí pojmenovaných šablon, výsledkem byl vždy nový fragment výstupního dokumentu.

Příklad 14.7. Definice uživatelských funkcí v XSLT 2.0 – faktorial3.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:muj="http://example.com/muj"
                version="2.0">

<xsl:output method="text"/>

<xsl:param name="cislo" select="5" as="xs:integer"/>

<xsl:template match="/">
  <xsl:value-of select="muj:faktorial($cislo)"/>
  <xsl:text>&#xA;</xsl:text>
</xsl:template>

<xsl:function name="muj:faktorial" as="xs:integer">
  <xsl:param name="n" as="xs:integer"/>
  
  <xsl:choose>
    <xsl:when test="$n > 1">
      <xsl:sequence select="$n * muj:faktorial($n - 1)"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:sequence select="1"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:function>

</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