Marek_Zyskowski
asked on
How do you count and loop in XSLT.It seems a trick is required.
I need to process a summary of these XML Records
<ROWSET>
<ROW num="1">
<CNAM>Company 1</CNAM>
<ISSUENO>1744</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:41:59</STATUSDT>
</ROW>
<ROW num="2">
<CNAM>Company 2</CNAM>
<ISSUENO>1334</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>SF</RESRCH>
<STATUSDT>9/22/2008 10:42:33</STATUSDT>
</ROW>
<ROW num="3">
<CNAM>Company 3</CNAM>
<ISSUENO>1585</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:42:50</STATUSDT>
</ROW>
<ROW num="4">
<CNAM>Company 4</CNAM>
<ISSUENO>1569</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:43:20</STATUSDT>
</ROW>
<ROW num="5">
<CNAM>Company 5</CNAM>
<ISSUENO>9139</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:44:23</STATUSDT>
</ROW>
<ROW num="6">
<CNAM>Company 6</CNAM>
<ISSUENO>9059</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:47:49</STATUSDT>
</ROW>
<ROW num="7">
<CNAM>Company 7</CNAM>
<ISSUENO>9139</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>AGR</RESRCH>
<STATUSDT>9/22/2008 10:49:46</STATUSDT>
<STATUS_WAS>A</STATUS_WAS>
</ROW>
<ROW num="8">
<CNAM>Company 8</CNAM>
<ISSUENO>9125</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>NP</RESRCH>
<STATUSDT>9/22/2008 10:57:32</STATUSDT>
</ROW>
<ROW num="9">
<CNAM>Company 9</CNAM>
<ISSUENO>2052</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>MLA</RESRCH>
<STATUSDT>9/22/2008 10:59:21</STATUSDT>
</ROW>
<ROW num="10">
<CNAM>Company 10</CNAM>
<ISSUENO>1585</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 11:1:14</STATUSDT>
</ROW>
<ROW num="11">
<CNAM>Company 11</CNAM>
<ISSUENO>9152</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>EIM</RESRCH>
<STATUSDT>9/22/2008 11:1:54</STATUSDT>
</ROW>
<ROW num="12">
<CNAM>Company 12</CNAM>
<ISSUENO>1569</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>CD</RESRCH>
<STATUSDT>9/22/2008 11:4:1</STATUSDT>
</ROW>
<ROW num="13">
<CNAM>Company 13</CNAM>
<ISSUENO>5002</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>SF</RESRCH>
<STATUSDT>9/22/2008 11:6:18</STATUSDT>
</ROW>
<ROW num="14">
<CNAM>Company 14</CNAM>
<ISSUENO>1611</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>EIM</RESRCH>
<STATUSDT>9/22/2008 11:7:6</STATUSDT>
</ROW>
<ROW num="15">
<CNAM>Company 15</CNAM>
<ISSUENO>7108</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 11:7:57</STATUSDT>
</ROW>
</ROWSET>
I want my output to look like this after 1 transform.
<Report>
<Item>
<Name>JRH</Name>
<Count>8</Count>
</Item>
<Item>
<Name>SR</Name>
<Count>7</Count>
</Item>
</Telemarketers>
I can't figure out the looping and counting in XSLT? Is there a simple solution.
<ROWSET>
<ROW num="1">
<CNAM>Company 1</CNAM>
<ISSUENO>1744</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:41:59</STATUSDT>
</ROW>
<ROW num="2">
<CNAM>Company 2</CNAM>
<ISSUENO>1334</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>SF</RESRCH>
<STATUSDT>9/22/2008 10:42:33</STATUSDT>
</ROW>
<ROW num="3">
<CNAM>Company 3</CNAM>
<ISSUENO>1585</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:42:50</STATUSDT>
</ROW>
<ROW num="4">
<CNAM>Company 4</CNAM>
<ISSUENO>1569</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:43:20</STATUSDT>
</ROW>
<ROW num="5">
<CNAM>Company 5</CNAM>
<ISSUENO>9139</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:44:23</STATUSDT>
</ROW>
<ROW num="6">
<CNAM>Company 6</CNAM>
<ISSUENO>9059</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 10:47:49</STATUSDT>
</ROW>
<ROW num="7">
<CNAM>Company 7</CNAM>
<ISSUENO>9139</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>AGR</RESRCH>
<STATUSDT>9/22/2008 10:49:46</STATUSDT>
<STATUS_WAS>A</STATUS_WAS>
</ROW>
<ROW num="8">
<CNAM>Company 8</CNAM>
<ISSUENO>9125</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>NP</RESRCH>
<STATUSDT>9/22/2008 10:57:32</STATUSDT>
</ROW>
<ROW num="9">
<CNAM>Company 9</CNAM>
<ISSUENO>2052</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>MLA</RESRCH>
<STATUSDT>9/22/2008 10:59:21</STATUSDT>
</ROW>
<ROW num="10">
<CNAM>Company 10</CNAM>
<ISSUENO>1585</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 11:1:14</STATUSDT>
</ROW>
<ROW num="11">
<CNAM>Company 11</CNAM>
<ISSUENO>9152</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>EIM</RESRCH>
<STATUSDT>9/22/2008 11:1:54</STATUSDT>
</ROW>
<ROW num="12">
<CNAM>Company 12</CNAM>
<ISSUENO>1569</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>SR</TMRKT>
<RESRCH>CD</RESRCH>
<STATUSDT>9/22/2008 11:4:1</STATUSDT>
</ROW>
<ROW num="13">
<CNAM>Company 13</CNAM>
<ISSUENO>5002</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>SF</RESRCH>
<STATUSDT>9/22/2008 11:6:18</STATUSDT>
</ROW>
<ROW num="14">
<CNAM>Company 14</CNAM>
<ISSUENO>1611</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>EIM</RESRCH>
<STATUSDT>9/22/2008 11:7:6</STATUSDT>
</ROW>
<ROW num="15">
<CNAM>Company 15</CNAM>
<ISSUENO>7108</ISSUENO>
<STATUS>V</STATUS>
<TMRKT>JRH</TMRKT>
<RESRCH>CPE</RESRCH>
<STATUSDT>9/22/2008 11:7:57</STATUSDT>
</ROW>
</ROWSET>
I want my output to look like this after 1 transform.
<Report>
<Item>
<Name>JRH</Name>
<Count>8</Count>
</Item>
<Item>
<Name>SR</Name>
<Count>7</Count>
</Item>
</Telemarketers>
I can't figure out the looping and counting in XSLT? Is there a simple solution.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I tried the solution and it looks like it works perfectly. Thanks.
welcome
You just push out the nodes using xsl:apply-templates or use an xsl:for-each
The difficulty in this little task however is looping over ROW elements with distinct TMRKT
That is grouping, for which you could use the muenchian technique, as I did in my solution,
explained remarkably well here
http://www.jenitennison.com/xslt/grouping/muenchian.html