Re: [xsl] Listing all element/attributes/attribute values

Subject: Re: [xsl] Listing all element/attributes/attribute values
From: David Carlisle <davidc@xxxxxxxxx>
Date: Thu, 7 Jul 2005 14:30:01 +0100
> 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
________________________________________________________________________

Current Thread