MudGuard: preceding-sibling-Mißverständnis (Liste von Anfangsbuchstaben)

Beitrag lesen

Hi,

Mit
<xsl:template match="catter" mode="shortnavi">
   <xsl:variable name="current" select="translate(substring(@names,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
   <xsl:variable name="thispos" select="position()-1"/>
   <xsl:if test="$thispos=0">
      <a href="#label{$current}"><xsl:value-of select="$current"/></a>
   </xsl:if>
   <xsl:if test="$thispos>0">
      <xsl:variable name="previous" select="translate(substring(../catter[position()=$thispos]/@names,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" />
      <xsl:if test="$previous != $current">
         <a href="#label{$current}"><xsl:value-of select="$current"/></a>
      </xsl:if>
   </xsl:if>
</xsl:template>

klappt es - auch wenn die Elemente total unsortiert im XML vorliegen (die Sortierung wird ja im aufrufenden Template vorgenommen):

<xsl:apply-templates select="catter" mode="shortnavi">
   <xsl:sort select="@names"/>
</xsl:apply-templates >

Für die nächste XSL- bzw. XPath-Version wünsch ich mir ein paar zusätzliche String-Funktionen!
toUpper, toLower (die translate-Krücke funktioniert zwar, ist aber nicht gerade hübsch) sowie replace (rekursive templates nur für sowas find ich lästig) wären mal die wichtigsten Kandidaten...

cu,
Andreas

--
MudGuard? Siehe http://www.mud-guard.de/