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

Subject: Re: [xsl] Listing all element/attributes/attribute values
From: James Cummings <cummings.james@xxxxxxxxx>
Date: Thu, 7 Jul 2005 15:26:57 +0100
On 7/7/05, David Carlisle <davidc@xxxxxxxxx> wrote:
>
> This is a typical "muenchian grouping" problem
> 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:-)

I thought it might be something along those lines, but I seemed to
fail when attempting to gropu both elements and attributes (in my
xslt2 solution using xsl:for-each-group) but I've no real reason to
use xslt2 over 1 in this case so, works fine for me. :-)

Many thanks to both David and Joris.

>
> <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
> ________________________________________________________________________
>
>


--
James Cummings, Cummings dot James at GMail dot com

Current Thread