xsl:sort nach mehreren Kriterien sortieren
Bernd Stegman
- xsl
Hallo,
ich möchte eine Bücherliste in XML per XSL ausgeben und dabei sortieren. So sieht die Liste in etwa aus:
<buchbestand>
<buch>
<titel>Titel 2</titel>
<autor>Autor 2</autor>
</buch>
<buch>
<titel>Titel 1</titel>
<autor>Autor 1</autor>
</buch>
<buch>
<titel>Titel 3</titel>
<autor>Autor 1</autor>
</buch>
</buchbestand>
Es gibt also zu jedem Buch einen Titel und einen Autor. Ich möchte diese Liste nun sortiert nach Autor und Titel ausgeben.
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="buchbestand"/>
</fo:flow>
<xsl:template match="buchbestand">
<xsl:apply-templates select="autor">
<xsl:apply-templates select="titel">
</xsl:template>
Wie binde ich nun xsl:sort so ein, dass nach Autor und nach Titel sortiert wird?
Servus
Bernd
Hallo,
ich möchte eine Bücherliste in XML per XSL ausgeben und dabei sortieren. So sieht die Liste in etwa aus:
Es gibt also zu jedem Buch einen Titel und einen Autor. Ich möchte diese Liste nun sortiert nach Autor und Titel ausgeben.
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="buchbestand"/>
</fo:flow><xsl:template match="buchbestand">
<xsl:apply-templates select="autor">
<xsl:apply-templates select="titel">
</xsl:template>
Wie binde ich nun xsl:sort so ein, dass nach Autor und nach Titel sortiert wird?
Willst du eine Liste oder zwei Listen?
Dein Template (<xsl:template match="buchbestand">) hat nicht viel Sinn, denn damit erhältst du zuerst alle Autoren und dann alle Titel, es sei denn es ist so beabsichtigt.
Außerdem ist es fehlerhaft (apply-templates sind nicht abgeschlossen), so dass ich jetzt nicht weiss, wie dein wirklicher Code aussieht.
Wie auch immer: du kanns auch im <apply-templates> <sort> verwenden und das auch mehrfach.
<xsl:apply-templates select="....">
<xsl:sort select="...." /> --> erstes Sortierkriterium
<xsl:sort select="...." /> --> zweites Sortierkriterium
etc.
</xsl:apply-templates>
Grüße
Thomas