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.5 Seřazení posloupnosti uzlů

XSLT již ve své verzi 1.0 podporovalo řazení dat – sloužila k němu instrukce <xsl:sort>, která umožňovala zpracovat uzly pomocí instrukcí <xsl:for-each> a <xsl:apply-templates> ve zvoleném pořadí. Uzly však nešlo seřadit bez jejich následného zpracování. To je možné až v XSLT 2.0 díky instrukci <xsl:perform-sort>, která vrátí posloupnost seřazenou podle určitého kritéria.

Můžeme pak pracovat jen s vybranými uzly v seřazené posloupnosti, nebo naopak můžeme seřazené uzly zpracovávat opakovaně bez nutnosti opakovaného řazení.

Příklad 14.8. Ukázka seřazení posloupnosti – katalog-otoceny2.xsl

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

<xsl:output method="html" encoding="utf-8"/>
  
<xsl:template match="/">
  <html>
    <head>
      <title>Katalog firmy <xsl:value-of select="/katalog/info/firma"/></title>
      <style type="text/css">
        body   { color: black; background-color: white; }
        table  { border: solid 2px black; border-collapse: collapse; }
        th a   { text-decoration: none; color: black; }
        th     { background-color: #FF8000; }
        th, td { border: solid 1px black; }
      </style> 
    </head>
    <body>
      <h1>
        Katalog firmy <xsl:value-of select="/katalog/info/firma"/>
      </h1>
      
      <xsl:variable name="serazene-polozky">
        <xsl:perform-sort select="/katalog/polozka">
          <xsl:sort select="cena" data-type="number"/>
        </xsl:perform-sort>        
      </xsl:variable>
  
      <table width="100%">
        <tr>
          <th>Název</th>
          <xsl:for-each select="$serazene-polozky/polozka">
            <td align="center"><xsl:value-of select="nazev"/></td>
          </xsl:for-each>
        </tr>
        <tr>
          <th>Kategorie</th>
          <xsl:for-each select="$serazene-polozky/polozka">
            <td align="center"><xsl:value-of select="kategorie"/></td>
          </xsl:for-each>
        </tr>
        <tr>
          <th>Cena</th>
          <xsl:for-each select="$serazene-polozky/polozka">
            <td align="center"><xsl:value-of select="cena"/></td>
          </xsl:for-each>
        </tr>
      </table>
      
      <p>
        Nejlevnější položka je 
        <b>
          <xsl:value-of select="$serazene-polozky/polozka[1]/nazev"/>
        </b>        
      </p>
      
      <p>
        Nejdražší položka je
        <b>
          <xsl:value-of select="$serazene-polozky/polozka[last()]/nazev"/>
        </b>        
      </p>
      
      

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