RE: [xsl] Count of unique attribute names

Subject: RE: [xsl] 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()))"/>

Current Thread