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/