xsl-list
[Top] [All Lists]

RE: [xsl] Recursive counting

2006-07-19 08:38:53
Well after success with my first recursive template I was all 
set to make one of my own, but now shamefully am coming to 
the list for advice over something that appears quite simple.

First thing is to recognize this as a grouping problem. For each distinct
value of @type you need to do something.

In XSLT 2.0:

<xsl:for-each-group select="/*/options/o" group-by="@type">
  <xsl:sort select="current-grouping-key()"/>
  <out type="{current-grouping-key()}"
       count="{count(/*/person[(_at_)pref=current-group()]}"/>
</xsl:for-each-group>


XML ------->

<options>
   <o type="A">who</o>
   <o type="A">what</o>
   <o type="A">when</o>
   <o type="B">how</o>
   <o type="B">nexus</o>
   <o type="B">triumph</o>
   <o type="C">alligator</o>
   <o type="C">spurn</o>
</option>

<people>
  <person pref="who" />
  <person pref="nexus" />
  <person pref="how" />
  <person pref="alligator" />
  <person pref="spurn" />
  <person pref="triumph" />
     .... etc ....
</people>


Desired output ------->

<!-- @count corresponds to number of times  the preference 
appeared among the list of <people> --->

  <out type="A" count="1" />
  <out type="B" count="3" />
  <out type="C" count="1" />


Stipulation: --------->

<out>'s must be sorted alphabetically, regardless of <option> order.

--~------------------------------------------------------------------
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>
--~--



--~------------------------------------------------------------------
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>