Re: [xsl] Getting equivalence classes on attributes

Subject: Re: [xsl] Getting equivalence classes on attributes
From: Francis Norton <francis@xxxxxxxxxxx>
Date: Mon, 18 Jun 2001 07:00:38 +0100
"Rafael R. Sevilla" wrote:
> Hello.  Is there a way to write an XPath expression that will return each
> equivalence class on the value of an attribute, i.e. every collection of
> nodes whose value for a certain attribute are the same e.g.
See for the
general method of grouping elements by some XPath key expression. You
would want to group attributes with something like: 

<xsl:key name="attributes-by-name-and-value" match="@*"
use="concat(name(), '=', ." />

with, instead of a xsl:value-of, something like:

<xsl:copy-of select=".." />

In other words,

<xsl:stylesheet version="1.0"
   <xsl:output indent="yes"/>
   <xsl:key name="all-attributes" match="@*" use="concat(name(), '=',
   <xsl:template match="/">
         <xsl:for-each select="//@*[generate-id() =
generate-id(key('all-attributes', concat(name(), '=', .))[1]) ]">
            <xsl:sort select="name()"/>
            <group attribute="{name()}" value="{.}>
               <xsl:for-each select="key('all-attributes',
concat(name(), '=', .))">
                  <xsl:copy-of select=".."/>

This works with both saxon and msxsl. 


 XSL-List info and archive:

Current Thread