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.

Kapitola 5. Práce s parametry a proměnnými

5.1. Proměnné
5.2. Parametry
5.3. Předávání parametrů
5.4. Pojmenované šablony

Proměnné slouží v XSLT k zapamatování údajů, které opakovaně používáme. Jednotlivé údaje pak nemusíme opakovaně zjišťovat a ušetří se tak čas.

Parametry jsou speciálním druhem proměnných, které mají implicitní hodnotu, kterou lze při volání stylu nebo šablony změnit.

5.1 Proměnné

Na rozdíl od jiných jazyků, nelze v XSLT měnit obsah již definované proměnné. Proměnnou lze nastavit buď globální pro celý styl, nebo jen pro určitou šablonu či její část. Proměnné definované v šabloně přitom zastíní globální proměnné stejného jména.

Proměnná je platná pro všechny své následující sourozence a jejich potomky.

Proměnná může obsahovat libovolný XPath typ (seznam uzlů, řetězec, číslo, boolean) a kus výstupního dokumentu.

Proměnnou můžeme definovat jedním z následujících tří způsobů:

<!-- Přiřazení výsledku libovolného výrazu do proměnné -->
<xsl:variable name="jméno"
              select="výraz"/>

<!-- Přiřazení prázdného řetězce do proměnné -->
<xsl:variable name="jméno"/>

<!-- Přiřazení fragmentu výstupního dokumentu do proměnné -->
<xsl:variable name="jméno">
  elementy, atributy apod.
</xsl:variable>

Na obsah proměnné se pak ve výrazech můžeme odvolávat pomocí zápisu $jméno.

Pokud chceme hodnotu proměnné zkopírovat do výstupního dokumentu, můžeme použít:

<xsl:value-of select="$jméno"/>

Takovýto zápis převede obsah proměnné vždy na textový řetězec, i když proměnná obsahuje kus výstupního dokumentu včetně elementů. Pokud potřebujeme kopírovat i strukturu, použijeme jinou instrukci:

<xsl:copy-of select="$jméno"/>

Rozdíl mezi chováním <xsl:value-of> a <xsl:copy-of> ilustruje následující příklad.

Příklad 5.1. Kopírování proměnné do výstupu – promenna.xsl

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

<xsl:template match="/">
  <xsl:variable name="a">
    <para>Odstavec 1</para>
    <para>Odstavec 2</para>
  </xsl:variable>

  <xsl:value-of select="$a"/>
    ---
  <xsl:copy-of select="$a"/>
</xsl:template>

</xsl:stylesheet>

Tento styl vygeneruje následující výstup:

Odstavec 1Odstavec 2
    ---
  <para>Odstavec 1</para><para>Odstavec 2</para>
© 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