|
Subject: Re: [xsl] Recursive counting From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Tue, 18 Jul 2006 22:31:37 -0400 |
At 2006-07-18 21:18 -0400, I wrote:At 2006-07-18 17:24 -0400, Steve wrote: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.
XML -------> ...
Desired output -------> <!-- @count corresponds to number of times the preference appeared among the list of <people> --->
..
Stipulation: --------->
<out>'s must be sorted alphabetically, regardless of <option> order.
I'm not sure why you are using recursion ... I hope the following helps. BTW, I think your desired output count was wrong for the third item.
Here is a version that uses keys ... there was no need to use the variable method of grouping and for big data sets I believe the answer below will be a lot faster.
One more edit ... no need for the current() function ... that was left over from the variable version I posted.
T:\ftemp>type steve.xml
<?xml version="1.0" encoding="US-ASCII"?>
<data>
<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>
</options>
<people>
<person pref="who" />
<person pref="nexus" />
<person pref="how" />
<person pref="alligator" />
<person pref="spurn" />
<person pref="triumph" />
.... etc ....
</people>
</data>T:\ftemp>type steve.xsl <?xml version="1.0" encoding="US-ASCII"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="options" match="o" use="@type"/> <xsl:key name="prefs" match="person" use="@pref"/>
<xsl:template match="/data">
<output>
<xsl:for-each select="options/o[generate-id(.)=
generate-id(key('options',@type)[1])]">
<xsl:sort select="@type"/>
<out type="{@type}"
count="{count(key('prefs',key('options',@type)))}"/>
</xsl:for-each>
</output>
</xsl:template></xsl:stylesheet> T:\ftemp>xslt steve.xml steve.xsl con <?xml version="1.0" encoding="utf-8"?> <output> <out type="A" count="1"/> <out type="B" count="3"/> <out type="C" count="2"/> </output> T:\ftemp>
-- Registration open for UBL training: Montrial, Canada 2006-08-07 Also for XSL-FO/XSLT training: Minneapolis, MN 2006-07-31/08-04 Also for UBL/XML/XSLT/XSL-FO training: Varo,Denmark 06-09-25/10-06 World-wide corporate, govt. & user group UBL, XSL, & XML training. G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995) Male Cancer Awareness Aug'05 http://www.CraneSoftwrights.com/s/bc Legal business disclaimers: http://www.CraneSoftwrights.com/legal
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Recursive counting, G. Ken Holman | Thread | Re: [xsl] Recursive counting, Steve |
| Re: [xsl] Recursive counting, G. Ken Holman | Date | Re: [xsl] Re: RSS 2.0 to RSS 1.0 XS, George Cristian Bina |
| Month |