Alan K. Gay wrote:
I have a parent <table> that can have zero to infinite <table1>. I'm
trying to create an html table that, for each occurrence of <table1>,
has the contents of <table> and <table1>. If there are no occurrences
of <table1>, I still need the contents of <table>. Below is sample
input and desired output.
I need help with the looping/xpath approach to make this happen. Thanks
in advance for any assistance.
<NewDataSet>
<Table>
<AvgScore>323</AvgScore>
<Table1>
<DeliveryID>4102</DeliveryID>
</Table1>
<Table1>
<DeliveryID>4103</DeliveryID>
</Table1>
<Table1>
<DeliveryID>4104</DeliveryID>
</Table1>
</Table>
<Table>
<AvgScore>975</AvgScore>
</Table>
</NewDataSet>
<table>
<tr><td>323</td><td>4102</td></tr>
<tr><td>323</td><td>4103</td></tr>
<tr><td>323</td><td>4104</td></tr>
<tr><td>975</td></tr>
</table>
Hmm, not that hard. There are various combinations of apply-templates and
for-each that you could use to achieve the same result. Here's one of them:
<xsl:template match="/">
<xsl:apply-templates select="NewDataSet/Table"/>
</xsl:template>
<xsl:template match="Table">
<xsl:variable name="avg" select="string(AvgScore)"/>
<xsl:for-each select="Table1/DeliveryID">
<tr>
<td>
<xsl:value-of select="$avg"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</xsl:template>
But let me guess.. MSXML2 / IE5, right? no xsl:variable, no string()...
take out the xsl:variable and change "$avg" to "../../AvgScore"
With some additional magic you could fill in the missing cells, but it's not
strictly necessary, with most browsers' forgiving table rendering engines.
- Mike
____________________________________________________________________________
mike j. brown | xml/xslt: http://skew.org/xml/
denver/boulder, colorado, usa | resume: http://skew.org/~mike/resume/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list