Carsten Pieper: max-Funktion

Hallo zusammen!

Ich möchte gerne aus einer XML-Datei mit mehreren Preis-Elementen den höchsten Preis auslesen, ihn an eine Variable binden, um diese dann dafür zu verwenden, alle Bücher dieser Datei auszugeben, die eben diesen Maximalpreis haben. So hatte ich mir das vorgestellt:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:variable name="maxprice">
   <xsl:for-each select="//price">
    <xsl:sort data-type="number" order="ascending" select="."/>
   </xsl:for-each>
   <xsl:value-of select="//price[last()]"/>
 </xsl:variable>

<xsl:template match="/">
  <ROOT>
  <xsl:for-each select="//item">
   <xsl:if test="price=$maxprice">
    <EXPENSIVE>
     <TITLE><xsl:value-of select="title"/></TITLE>
     <PRICE><xsl:value-of select="price"/></PRICE>
    </EXPENSIVE>
   </xsl:if>
  </xsl:for-each>
  </ROOT>
 </xsl:template>
</xsl:stylesheet>

Idiotischerweise bekomme ich aber so den minimalen Preis raus, auch wenn ich descending nehme. 5 ist der erste Preis in der Liste. Dass bedeutet also, dass im Bereich der Variablenzuweisung etwas nicht stimmt. Was mache ich denn falsch?

Herzlichen Dank im Voraus,

Carsten

  1. Hallo,

    <xsl:variable name="maxprice">
       <xsl:for-each select="//price">
        <xsl:sort data-type="number" order="ascending" select="."/>
       </xsl:for-each>
       <xsl:value-of select="//price[last()]"/>
    </xsl:variable>

    Damit bekommst du das letzte price-Elemente im Dokument (da dein for-each nichts bewirkt).
     <xsl:variable name="maxprice">
       <xsl:for-each select="//price">
        <xsl:sort data-type="number" order="descending"/>
     <xsl:if test="position() = 1">
      <xsl:value-of select="number(.)" />
     </xsl:if>
       </xsl:for-each>
     </xsl:variable>

    Grüße
    Thomas

    1. Hallo Thomas,

      na ganz herzlichen Dank, das funktioniert wunderbar.

      Ich hatte nicht realisiert, dass die Sortierung außerhalb der for-Schleife natürlich nicht erhalten bleibt.

      Alles Gute,

      Carsten