Article Index

Výpočty v šablonách

Proměnné

V rámci XSL můžeme pracovat s proměnnými a tak výstupy "vylepšit" o vypočené hodnoty nebo o jiné proměnné. V rámci příkladu můžeme uvést počet položek, grafické znázornění poměru, ohodnocení určitým počtem grafických symbolů a podobně.

Proměnné můžeme definovat pro šablonu, část šablony nebo celý dokument.

První příklad může vypadat takto:

<xsl:param name="pozadi" select="lightblue" /> - definujeme na začátek souboru parametr pozadi s hodnotou lightgreen. Pak v kódu můžeme použít:

<table border="1" bgcolor="{$pozadi}">.

Pro vyvolání hodnoty tedy vkládáme znak $ a následně název parametru.

Do proměnné můžeme vkládat všechno možné, zde je ukázka výběru nejvyšší teploty:

<xsl:variable name="max">
  <xsl:for-each select="mereni/teplota">
    <xsl:sort select="." data-type="number" order="descending"/>
      <xsl:if test="position() = 1">
        <xsl:value-of select="."/>
      </xsl:if>
  </xsl:for-each>               
</xsl:variable>

Proměnná se jmenuje max, je vybrán element teplota, postupně jsou prohledány všechny výskyty tohoto elementu, seřazeny sestupně a do proměnné max je uložena 1. hodnota, tedy ta nejvyšší.

Variable nebo Param

Rozdíl mezi těmito značkami je obvykle udáván v tom, že <param> může být definován mimo XSL soubor, případně mimo danou šablonu. To lze i u proměnné, nicméně u níc je udáváno, že se je jích obsah nemůže dále měnit.

Výpočty

Výpočty - v XSLT můžeme počítat, například výskyty jednotlivých položek (v ukázce počet naměřených teplot vyšších než 0:

<xsl:value-of select="count(mereni[teplota<0])"/>

Takže jak vypadá XSLT pro výše uvedený příklad?

<?xml version="1.0" encoding="UTF-8"?><!-- hlavička -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xs"
                version="2.0">

<!-- Definujeme parametr pojmenovaný bgcolor s hodnotou lightgreen. -->
<xsl:param name="bgcolor" select="lightgreen" />

<!-- šablona pro celý dokument - obsahuje osnovu HTML + pevnou hlavičku tabulky - první řádek -->
<xsl:template match="/">
    <html>
        <head>
            <title>Měření teploty</title>
            <meta charset="UTF-8" />
        </head>
        <body>
            <h1>Měření teploty</h1>
            <table border="1">
              
<tr>
<!-- Pro použití barvy z parametru bgcolor jej zde aplikujeme. -->
                <td bgcolor="{$bgcolor}">ID</td>
                <td bgcolor="{$bgcolor}">Datum</td>
                <td bgcolor="{$bgcolor}">Teplota</td>

              </tr>           
<!-- Sem se aplikují všechny šablony pod touto. -->
              <xsl:apply-templates/>
            </table>            
        </body>        
    </html>   
</xsl:template>


<!-- pro kontakt uděláme cyklus, který vypíše řádek tabulky HTML - atribut, jmeno, prijmeni -->
<xsl:template match="mereni">

    <xsl:for-each select=".">
    <tr>
        <td>
            <xsl:value-of select="./@"/>
        </td>

        <td>
            <xsl:value-of select="datum"/>
        </td>

        <td>
            <xsl:value-of select="teplota"/>
        </td>
    </tr>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Takže jak na to celé? Pojďme postupně, kdo chce komplení přehled najde ho zde: W3C recommendation - XSLT2.0.