Řazení dat

  • data před zpracováním pomocí instrukcí xsl:apply-templates a xsl:for-each můžeme seřadit

  • <xsl:sort select="výraz" data-type="typ"/>
  • data v dokumentu XML jsou neotypovaná a chápou se jako text (pokud nepoužíváme XML schéma a Schema-Aware verzi XSLT), takže musíme určovat datový typ nebo provést ruční přetypování

  • lze určit mnoho dalších parametrů, např. jazyk pro správné řazení podle národních specifik

Příklad 9. katalog-razeni.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><xsl:value-of select="/katalog/nazev"/></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>
        <xsl:value-of select="/katalog/nazev"/>
      </h1>

      <p>Položky jsou seřazeny podle ceny.</p>
  
      <table width="100%">
        <tr>
          <th>Název</th>
          <th>Kategorie</th>
          <th>Cena</th>
        </tr>  
        <!-- Pomocí šablon zpracujeme všechny položky -->
        <!-- Před voláním šablon jsou položky seřazeny -->
        <xsl:apply-templates select="/katalog/polozka">
          <xsl:sort select="cena" data-type="number"/>
        </xsl:apply-templates>
      </table>
    </body>
  </html>    
</xsl:template>

<xsl:template match="polozka">
  <tr>
    <xsl:apply-templates/>
  </tr>
</xsl:template>

<xsl:template match="nazev">
  <td align="center"><xsl:apply-templates/></td>
</xsl:template>

<xsl:template match="kategorie">
  <td align="center"><xsl:apply-templates/></td>
</xsl:template>

<xsl:template match="cena">
  <td align="right"><xsl:apply-templates/></td>
</xsl:template>

<xsl:template match="vyrobce"/>

<xsl:template match="katalog/nazev"/>

</xsl:stylesheet>