André Laugks: xsl:sort

Beitrag lesen

Hallo!

Überleg mal: wenn du nur ein Element hättest, was willst du dann an diesem einen Element sortieren? Du hast aber viele <name> Elemente.

Du benötigst hier das Attribut select, weil du dein Sortierkriterium darin festlegst. Du legst eben fest dass die Ausgabe sortiert und zwar aufgrund des <name> Elements erfolgen muss.

Uppsss, ich hatte als ich es geschrieben habe, an mein Entwurf gedacht. Deshalb schrieb ich, ich kann das select weg lassen.

Auszug:
<xsl:apply-templates select="eintrag/name">
  xsl:sort/
</xsl:apply-templates>

Dann wird die Sortierung immer wieder pro <name> Element durchgeführt und da du in dem Fall tatsächlich nur ein einziges <name> Element zum Sortieren hast, bekommst du die von dir erwähnte "unsortierte" Liste.

Ok, das ist jetzt klar.

Beim <xsl:teplate match=""> wird zwar ähnlich wie beim for-each für jedes <eintrag> Element die entsprechende Transformation durchgeführt aber die Ausgabe des Ergebnissbaumes erfolgt erst durch xsl:apply-templates und dort kannst du für diese Ausgabe eben die Reihenfolge der selben mit <xsl:sort select=""> festlegen.

'Ergebnisbaum' hat mich jetzt glaube drauf gebracht.

<table border="1">
   <xsl:apply-templates select="eintrag">
     <xsl:sort select="name"/>
   </xsl:apply-templates>
</table>

<xsl:template match="eintrag">
  <xsl:for-each select="name">
    <xsl:sort select="."></xsl:sort>
      <tr>
         <td><xsl:value-of select="."/></td>
      </tr>
  </xsl:for-each>
</xsl:template>

Bei <xsl:apply-templates select="eintrag"><xsl:sort select="name"/></xsl:apply-templates> kommen meine Namen folgendermaßen an. (Vielleicht nicht ganz so, aber mal bildlich gezeigt.)

<tr><td><name>Sandra C.</name></td></tr>
<tr><td><name>Alex</name></td></tr>
<tr><td><name>Michael Z.</name></td></tr>
<tr><td><name>Ernst</name></td></tr>
<tr><td><name>Dominic</name></td></tr>
<tr><td><name>Evelyne</name></td></tr>
<tr><td><name>Joukje</name></td></tr>
<tr><td><name>Therese</name></td></tr>
<tr><td><name>Lars</name></td></tr>

Jetzt erst wird nach 'name' sortiert.

MfG, André Laugks
L-Andre @ gmx.de