xsl-list
[Top] [All Lists]

Re: how getting a list of occurences

2003-09-19 01:28:28
Hi Stuart,

it works perfectly, thank you a lot!

Elena

Stuart Brown wrote:

Hi Elena,

Try this

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">

 <xsl:key name="persNames" match="persName" use="."/>

 <xsl:template match="/">
   <xsl:for-each select="root//persName[not(.=preceding::persName)]">
     <xsl:sort select="."/>
     <xsl:value-of select="concat(.,' ',count(key('persNames',.)))"/>
     <xsl:text>
</xsl:text>
   </xsl:for-each>
 </xsl:template>

</xsl:transform>

This creates a key, which is essentially a list of all the nodes that match
the match= attribute expression (in this case, all the persName elements),
and then indexes them by their contect (use=".").

The for-each instruction then selects all the persNames which do not equal a
preceding occurrence of persName (i.e. a uniqued list). I've added a sort
for alphabetical ordering. Finally, it outputs the value of the element
itself, a space, and then uses the key to count the number of persName
elements that have the same content.

Hope this helps,

Stuart

-----Original Message-----
From: Elena Pierazzo [mailto:pierazzo(_at_)ital(_dot_)unipi(_dot_)it] Sent: 19 September 2003 08:36
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] how getting a list of occurences


Hi all,
I firstly apologize for my beginner's question.

I've an XML document like this
<root>
   ....
      ...
         <p>
            <persName>pippo</persName>
            ...
            <persName>pluto</persName>
            ...
           <persName>pippo</persName>
            ...
            <persName>ciccio</persName>
            ....
          </p>
      ....
   ....
</root>

I would like to get as an output a list of all the occurences of the <persName> element and the number of time that the form occours, like that:

pippo 2
pluto 1
ciccio 1

I've tryed to do this using <xsl:number> as follow:

<xsl:template match="p">
<xsl:for-each select="persName">
<br />
<xsl:value-of select="." />:
<xsl:number count="*" value="???">
</xsl:number>
</xsl:for-each>
</xsl:template>

but I'm unable to complete the expression required by the value attribute.
Thank you in advance

Elena Pierazzo



XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list





XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



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