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>