Thomas J.S.: Maximalwert(e)

Beitrag lesen

Hallo,

Jetzt will ich an einer Stelle des erzeugten Dokuments das name-Attribut sowie die Anzahl der Events ausgeben.
Soweit noch kein Problem:
<xsl:template match="person" mode="maxmeet">
<li><xsl:value-of select="@name"/>: <xsl:value-of select="number(string-length(@events) + 1) div 4"/></li>
</xsl:template>

Ausgehend vom http://aktuell.de.selfhtml.org/tippstricks/xml/gruppierung1/index.htm

<li><xsl:value-of select="@name"/>: <xsl:value-of select="count(id(@events))"/></li>

Ich hätte die Liste gerne reduziert auf die persons, die am meisten events besucht haben.

Ausgehend vom http://aktuell.de.selfhtml.org/tippstricks/xml/gruppierung1/index.htm

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE activity [
   <!ELEMENT event EMPTY>
   <!ATTLIST event id   ID    #REQUIRED>
]>
<activity>
...
</activity>

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
 <xsl:output
  method="html"
  encoding="iso-8859-1"
  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
  indent="yes" />
 <xsl:template match="/activity">
 <html>
  <head>
   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
   <title>Veranstaltungen und Teilnehmer</title>
  </head>
  <body>
   <h2>Teilnehmer mit höchster Anz. von Veranst.</h2>
   <xsl:apply-templates select="participants" mode="highest" />
  </body>
 </html>
 </xsl:template>

<xsl:template match="participants" mode="highest">
  <xsl:variable name="highestnumberofevents">
   <xsl:for-each select="participant">
    <xsl:sort select="count(id(@events))" data-type="number" order="descending" />
    <xsl:if test="position() = 1">
     <xsl:value-of select="count(id(@events))" />
    </xsl:if>
   </xsl:for-each>
  </xsl:variable>
  <ul>
   <xsl:for-each select="participant">
    <xsl:sort select="count(id(@events))" data-type="number" order="descending" />
    <xsl:variable name="numberofevents" select="count(id(@events))" />
    <xsl:if test="$numberofevents = $highestnumberofevents">
     <li>
      <xsl:value-of select="@name"/>: <xsl:value-of select="$numberofevents" />
     </li>
    </xsl:if>
   </xsl:for-each>
  </ul>
 </xsl:template>
</xsl:stylesheet>

Grüße
Thomas