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 6. Řazení a seskupování uzlů

6.1. Řazení
6.2. Seskupování

Uzly, které chceme zpracovat pomocí <xsl:for-each> a <xsl:apply-templates>, můžeme před zpracováním seřadit podle různých kritérií. Uzly se pak nezpracovávají v pořadí daném dokumentem, ale v pořadí definovaném tříděním.

6.1 Řazení

Kritéria třídění se určují pomocí instrukce <xsl:sort>, která se jako první uvádí uvnitř <xsl:for-each> nebo <xsl:apply-templates>.

Třídění se ovládá pomocí následujících atributů:

select

Výraz, který vybere hodnoty, podle kterých se provede řazení.

data-type

Standardně se provádí lexikografické porovnávání, pokud chceme hodnoty vybrané pomocí select porovnávat jako čísla, musíme změnit datový typ na number (implicitní je text).

order

Výběr vzestupného (ascending) nebo sestupného (descending) uspořádání.

lang

Kód jazyka, jehož pravidla se mají použít pro porovnávání. Ne všechny procesory tuto vlastnost podporují.

case-order

Mají se velká písmena řadit před malá (upper-first nebo lower-first).

Příklad 6.1. Seřazení citátů podle abecedy – citaty-podle-abecedy.xsl

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

<xsl:output indent="yes" method="html" encoding="utf-8"/>

<xsl:template match="citaty">
  <html>
    <head>
      <title>Citáty podle abecedy</title>
    </head>
    <body>
      <xsl:for-each select="citat">
        <xsl:sort select="text"/>
        <p>
          <xsl:value-of select="text"/>
          <xsl:text> - </xsl:text>
          <xsl:value-of select="autor"/>
        </p>
      </xsl:for-each>
    </body>
  </html>
</xsl:template>

</xsl:stylesheet>

Pokud chceme řadit podle několika kritérií najednou, stačí uvést několik instrukcí <xsl:sort> za sebou. Pokud se kritérium z prvního řazení pro některé uzly shoduje, rozhodnou o výsledném pořadí následující specifikace řazení.

Následující ukázka seřadí citáty primárně podle jména autora a sekundárně podle textu citátu.

Příklad 6.2. Víceúrovňové řazení – citaty-podle-autoru3.xsl

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

<xsl:output indent="yes" method="html" encoding="utf-8"/>

<xsl:template match="citaty">
  <html>
    <head>
      <title>Citáty podle abecedy</title>
    </head>
    <body>
      <xsl:for-each select="citat">
        <xsl:sort select="autor"/>
        <xsl:sort select="text"/>
        <p>
          <xsl:value-of select="autor"/>
          <xsl:text> - </xsl:text>
          <xsl:value-of select="text"/>
        </p>
      </xsl:for-each>
    </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