Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="text"/>
<xsl:key name="kElByName" match="/*/*" use="name()" />
<xsl:template match=
"/*/*[generate-id()=generate-id(key('kElByName',name())[1])]">
<xsl:value-of select="concat(name(),'
')"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному XML-документу :
<section>
<books>
<book>
<title>Child 44</title>
<author>Thomas Rob Smith</author>
<price>5.00</price>
</book>
<book>
<title>Atlas Shrugged</title>
<author>Ayn Rand</author>
<price>7.00</price>
</book>
</books>
<cds>
<cd>
<title>A Passage in time</title>
<band>Authority Zero</band>
<price>10.00</price>
</cd>
</cds>
</section>
создает искомое, верный результат :
books
cds
Обратите внимание : используется метод Munchian для группировки .Это, вероятно, самый эффективный метод группировки для XSLT 1.0.