This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Stylesheet lists values [Was Re: Stylesheet listing elements and attributes]
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
version =
"1.0" >
<xsl:output method="text"/>
<xsl:key name="elements" match="*" use="name()"/>
<xsl:key name="attributes" match="@*"
use="concat(name(parent::*),':::',name())"/>
<xsl:key name="allSameAttributes" match="@*" use="name(parent::*)"/>
<xsl:template match = "*" >
<xsl:if test="generate-id() = generate-id(key('elements',name()))">
<xsl:text>
</xsl:text>
<xsl:value-of select="name()"/>
<xsl:apply-templates select="key('allSameAttributes',name())"/>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*">
<xsl:if test="generate-id() =
generate-id(key('attributes',concat(name(parent::*),':::',name())))">
<xsl:text>
 </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>: </xsl:text>
<xsl:apply-templates
select="key('attributes',concat(name(parent::*),':::',name()))"
mode="values"/>
</xsl:if>
</xsl:template>
<xsl:template match="@*" mode="values">
<xsl:variable name="sameValues"
select="key('attributes',concat(name(parent::*),':::',name()))[.
= current()]" />
<xsl:if test="generate-id() = generate-id($sameValues)">
<xsl:value-of select="."/>
<xsl:text>(</xsl:text>
<xsl:value-of select="count($sameValues)"/>
<xsl:text>) </xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
Sebastian Rahtz wrote:
>
> Miloslav Nic writes:
> > Inspired by your mail:
>
> thanks, very interesting; you worked along similar lines to my (failing)
> stylesheet. BUT
>
> a) it does not work with Saxon. I *only* get the list of elements,
> no list of attributes. curiously, Xalan does give me the
> attributes, so either Saxon or Xalan has a bug understanding
>
> <xsl:key name="allSameAttributes" match="@*" use="name(parent::*)"/>
>
> which, I agree, ought to work. Perhaps Mike Kay could comment on that?
>
> b) how about a list of the different values for each
> attribute... what I really want to see is something like
>
> p
> rend: green (2), left (1)
> type: warning (3)
> note
> place: margin (10), foot (12)
> xptr
> type: transclude (43)
> url: www.tug.org (1), www.microsoft.com (1)
>
> where the numbers are the counts for each occurrence of that value for
> that attribute for that element.
>
> sebastian
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
--
******************************************
<firstName> Miloslav </firstName>
<surname> Nic </surname>
<mail> nicmila@idoox.com </mail>
<support> http://www.zvon.org </support>
<zvonMailingList>
http://www.zvon.org/index.php?nav_id=4
</zvonMailingList>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list