xsl-list
[Top] [All Lists]

Re: [xsl] Muenchian grouping with either attribute

2006-09-14 08:04:54
 I know that the standard answer in cases like this is "do the
 Muenchian". But all the examples I've found deal with the Muenchian
 over elements, whereas here, I need a Muenchian on the combination of
 attr1 and attr2. 

xpath by design aims to treat attributes and elements as equally as
possible, so basically grouping attribute nodes works the same way as
grouping element nodes but you just need to add  a @  something like
this:


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 
 <xsl:output indent="yes"/>
 <xsl:key name="p" match="@*" use="."/>
 <xsl:key name="pn" match="@*" use="concat(name(),':',.)"/>
 
 <xsl:template match="/">
   <properties>
     <xsl:for-each 
select="root/item/property/@*[generate-id()=generate-id(key('p',.))]">
       <property name="{.}" >
         <xsl:for-each 
select="key('p',.)[generate-id()=generate-id(key('pn',concat(name(),':',.)))]">
           <xsl:attribute name="freq_{name()}">
             <xsl:value-of select="count(key('pn',concat(name(),':',.)))"/>
           </xsl:attribute>
         </xsl:for-each>
       </property>
     </xsl:for-each>
   </properties>
 </xsl:template>
 
</xsl:stylesheet>

$ saxon prop.xml prop.xsl
<?xml version="1.0" encoding="utf-8"?>
<properties>
   <property name="foo" freq_attr1="1" freq_attr2="1"/>
   <property name="bar" freq_attr2="1" freq_attr1="2"/>
   <property name="baz" freq_attr2="1"/>
</properties>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>