Subject: RE: Count of unique attribute names
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 3 Nov 2006 13:01:38 -0000
|
> My XSLT 2.0 solution below is working. I am just wondering if
> there is an easier way that could perhaps bring
> distinct-values() into play?
>
> <xsl:variable name="uniqueAttributeNames">
> <xsl:for-each-group select="//@*" group-by="local-name()">
> <xsl:sequence select="local-name()"/>
> </xsl:for-each-group>
> </xsl:variable>
> <xsl:sequence
> select="string-length(replace(replace($uniqueAttributeNames,
> '\c+', 'x'), '\C+', ''))"/>
>
Firstly, if you make uniqueAttributeNames hold a sequence of strings rather
than a single string, then you can use the much simpler expression
count($uniqueAttributeNames) to count them.
You can do this (a) by adding an "as" clause to the variable declaration
<xsl:variable name="uniqueAttributeNames" as="xs:string*">
or (b) by using distinct-values. So the whole thing is just
<xsl:sequence select="count(distinct-values(//@*/local-name()))"/>
|