...
<xsl:for-each select="buch[generate-id(.) = generate-id(key('first_letter_autor', substring(autor, 1, 1))[1])]">
<xsl:sort select="substring(autor, 1, 1)" data-type="text" order="ascending"/>
fo:block
<xsl:value-of select="substring(autor, 1, 1)"/>
</fo:block>
<xsl:for-each select="key('first_letter_autor', substring(autor, 1, 1))">
fo:block
<xsl:value-of select="autor"/>
</fo:block>
</xsl:for-each>
</xsl:for-each>liefert:
fo:blockH</fo:block>
fo:blockHofmann Corinne</fo:block>
fo:blockK</fo:block>
fo:blockKing Stephen</fo:block>
fo:blockKing Stephen</fo:block>
fo:blockKing Stephen</fo:block>
----------------------
<xsl:for-each select="buch[generate-id(.) = generate-id(key('first_letter_autor', substring(autor, 1, 1))[1])]">
<xsl:sort select="substring(autor, 1, 1)" data-type="text" order="ascending"/>
fo:block
<xsl:value-of select="substring(autor, 1, 1)"/>
</fo:block>
<xsl:for-each select="key('first_letter_autor', substring(autor, 1, 1))[1]">
fo:block
<xsl:value-of select="autor"/>
</fo:block>
</xsl:for-each>
</xsl:for-each>
liefert:
fo:blockH</fo:block>
fo:blockHofmann Corinne</fo:block>
fo:blockK</fo:block>
fo:blockKing Stephen</fo:block>
Thomas