Re: [xsl] Unique attribute values

Subject: Re: [xsl] Unique attribute values
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Thu, 10 Jan 2008 16:41:29 +0000
On 10/01/2008, Sean Tiley <sean.tiley@xxxxxxxxx> wrote:
> Hi there,
> I have the following structure in an XML file
> <root>
>  <file name="c:\">
>   <error line="4" message="Message1" severity="2"/>
>   <error line="67" message="Message2" severity="4"/>
>  </file>
>   <file name="c:\">
>   <error line="2" message="Message1" severity="2"/>
>   <error line="54" message="Message2" severity="4"/>
>   <error line="122" message="Message1" severity="2"/>
>   <error line="124" message="Message2" severity="4"/>
>  </file>
> </root>
> What I want to do is the following.
> I want a list of the unique values for the message attribute
> I then want to output attribute value and the number of times it
> appears in the file.
> I can successfully get the count for an attribute value by using
> <xsl:value-of select="count(/root/file/error[@message='Message1'])"/>
> but I am hardcoding the 'Message1" which is clearly not optimal

Assuming XSLT 2.0,

<xsl:for-each-group select="/root/file/error" group-by="@message">
  <xsl:value-of select="current-grouping-key()"/>
  <xsl:value-of select="count(current-group())"/>

you'll need to sort out the formatting...

Andrew Welch

Current Thread