What I want to do is with any well-formed XML document list all the
elements, attributes and attribute-values in a sorted list.
This is a typical "muenchian grouping" problem
Is this even easier in xslt2?
Only in so far as you are more likely to think of using
xsl:for-each-group than you are of usimg the MG equivalent
*[generate-id()=generate-id(key('e',name()))]"
(except of course for people on this list who see this idiom most
days:-)
David
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:key name="e" match="*" use="name()"/>
<xsl:key name="a" match="@*" use="concat(name(..),' ',name())"/>
<xsl:template match="/">
<xsl:for-each select="//*[generate-id()=generate-id(key('e',name()))]">
<xsl:sort select="name()"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="name()"/> (<xsl:value-of
select="count(key('e',name()))"/>)
<xsl:for-each
select="key('e',name())/@*[generate-id()=generate-id(key('a',concat(name(..),'
',name())))]">
<xsl:sort select="name()"/>
<xsl:text>
- </xsl:text>
<xsl:value-of select="name()"/>
<xsl:for-each select="key('a',concat(name(..),' ',name()))">
<xsl:text>
= </xsl:text>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
$ saxon list.xml list.xsl
a (1)
- href
= http://www.example.com/
div (1)
- class
= foo
p (2)
- class
= big
= small
- style
= font-weight: bold
- xml:id
= abc123
span (2)
- class
= foo
= bar
________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--