RE: [xsl] RE: xslt: nested for-each loops and other transformations?

Subject: RE: [xsl] RE: xslt: nested for-each loops and other transformations?
From: "Kevin Callahan" <kevincal@xxxxxxxxxxxxx>
Date: Thu, 10 Apr 2003 09:47:55 -0400
I determined I needed a grouping solution and used the following style sheet
to get my results:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="plans">

<HTML><BODY>

 <xsl:variable name="plan" select="*"/>

 <TABLE width='100%'>

 <TR>
  <TH> Plans </TH>
  <xsl:for-each select="$plan"> <xsl:sort/>
   <TH>
    <xsl:value-of select="@name"/>
   </TH>
  </xsl:for-each>
 </TR>

 <xsl:for-each select="plan/descriptor[ not (./@descriptor_name =
preceding::descriptor/@descriptor_name) ]">
	 <xsl:sort/>

	 <xsl:variable name="descriptor_name" select="@descriptor_name"/>

	  <TR>
	   <TD align='center'>
	   	<xsl:value-of select="$descriptor_name"/>
	   </TD>

	      <xsl:for-each select="$plan">
	      	  <xsl:sort/>

		  <xsl:variable name="plan_name" select="@name"/>
		  <xsl:variable name="descriptor" select="//descriptor[@descriptor_name =
$descriptor_name and ../@name = $plan_name]"/>

		  <TD align='center'>
		    <xsl:value-of select="$descriptor/@value" /><br/>
		  </TD>

	      </xsl:for-each>

	  </TR>

</xsl:for-each>

</TABLE>
</BODY></HTML>

</xsl:template>
</xsl:stylesheet>



-----Original Message-----
From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
[mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of Kevin
Callahan
Sent: Wednesday, April 09, 2003 4:03 PM
To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] RE: xslt: nested for-each loops and other
transformations?


I didn't know if I posted this before I had an activated account...

I am trying to figure out nested for-each looping and am finding no real
examples to help with this use case (or is there a better way than using
for-each?):

I have an xml document (xmlDocument) that looks like

<plans>

	<plan name="Plan A" id="1" quote="44.50">

		<descriptor descriptor_name="Provider" descriptor_id="44"
anchor="PROVIDER"
		value="Provider A"\>

		<descriptor descriptor_name="Underwriter" descriptor_id="45"
		anchor="UNDERWRITER" value="Underwriter A"\>

		<descriptor descriptor_name="Eligibility" descriptor_id="46"
		anchor="ELEGIBILITY" value="US Residents Only"\>

		<descriptor descriptor_name="Length of Coverage" descriptor_id="47"
		anchor="COVERAGE" value="30 day max."\>

		<descriptor .../>

</plan>

<plan name="Plan B" id="2" quote="77.50">

		<descriptor descriptor_name="Provider" descriptor_id="44"
anchor="PROVIDER"
		value="Provider B"\>

		<descriptor descriptor_name="Underwriter" descriptor_id="45"
		anchor="UNDERWRITER" value="Underwriter B"\>

		<descriptor descriptor_name="Eligibility" descriptor_id="46"
		anchor="ELEGIBILITY" value="No Over 80"\>

		<descriptor descriptor_name="Length of Coverage" descriptor_id="47"
		anchor="COVERAGE" value="180 day max."\>

		<descriptor .../>

</plan>

<plan name="Plan C" id="3" quote="99.50">

		<descriptor descriptor_name="Provider" descriptor_id="44"
anchor="PROVIDER"
		value="Provider C"\>

		<descriptor descriptor_name="Underwriter" descriptor_id="45"
		anchor="UNDERWRITER" value="Underwriter C"\>

		<descriptor descriptor_name="Eligibility" descriptor_id="46"
		anchor="ELEGIBILITY" value="All"\>

		<descriptor descriptor_name="Length of Coverage" descriptor_id="47"
		anchor="COVERAGE" value="30 day max."\>

		<descriptor .../>

</plan>

</plans>

The problem is that the xlst must take into account that the <descriptor..>
field is dynamic but will have the same # and type between plans.

I want to generate an html table that looks somewhat like:

<tr><td>Plan</td><td>Plan A</td><td>Plan B</td><td>Plan C</td></tr>

<tr><td>Provider</td><td>Provider A</td><td>Provider
B</td><td>ProviderC</td></tr>

<tr><td>Underwriter</td><td>Underwriter A</td><td>Underwriter
B</td><td>Underwriter C</td></tr>

.. etc

How would I achieve this two-prong looping in the xslt file? I know I can
use the <xsl:for-each ..\> tag but is there a way to populate a temporary
scheme of just <descriptors><descriptor/></descriptors> and then have a loop
through that?

Thank you very much in advance for any help!

-kevin



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


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


Current Thread