I am completely new to XSLT processing, but I have to admit, I am baflled by this situation. It seems that my XSLT <for-each select>s are working only two out of three times on the same xml file using a similar, repetitive structure.
My XSLT:
Code:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/demographics">
<html>
<head>
<link href="demos2013.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table border="0" cellpadding="5" cellspacing="5">
<xsl:for-each select="groups/group">
<tr>
<td colspan="3" align="left">
<b><xsl:value-of select="group-description"/></b>
</td>
<td align="right">
<b><xsl:value-of select="group-datatext"/></b>
</td>
<td align="right">
<b><xsl:value-of select="group-percenttext"/></b>
</td>
</tr>
<xsl:for-each select="sections/section">
<tr>
<td width="30"></td>
<td colspan="2" align="left">
<xsl:value-of select="section-description"/>
</td>
<td align="right">
<xsl:value-of select="section-datatext"/>
</td>
<td align="right">
<xsl:value-of select="section-percenttext"/>
</td>
</tr>
<xsl:for-each select="items/item">
<tr>
<td width="30"></td>
<td width="30"></td>
<td align="left">
<xsl:value-of select="item-description"/>
</td>
<td align="right">
<xsl:value-of select="item-datatext"/>
</td>
<td align="right">
<xsl:value-of select="item-percenttext"/>
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
A snippet of XML that isn't working:
Code:
<group id="2013EstPopHispOrLatinoByOrigin" row="27" calc="False" datatype="dtInteger"
percenttype="dtUnknown">
<group-description>2013 Est. Pop Hisp or Latino by Origin</group-description>
<group-originaldescription>2013 Est. Pop Hisp or Latino by Origin</group-originaldescription>
<group-datatext>56,981</group-datatext>
<group-datavalue>56981</group-datavalue>
<group-percenttext/>
<group-percentvalue>0</group-percentvalue>
<sections>
<section id="NotHispanicOrLatino" row="28" calc="False" datatype="dtInteger"
percenttype="dtPercent">
<section-description>Not Hispanic or Latino</section-description>
<section-originaldescription>Not Hispanic or Latino</section-originaldescription>
<section-datatext>46,842</section-datatext>
<section-datavalue>46842</section-datavalue>
<section-percenttext>82.21</section-percenttext>
<section-percentvalue>82.206349484916</section-percentvalue>
<items/>
</section>
<section id="HispanicOrLatino" row="29" calc="False" datatype="dtInteger"
percenttype="dtPercent">
<section-description>Hispanic or Latino:</section-description>
<section-originaldescription>Hispanic or Latino:</section-originaldescription>
<section-datatext>10,139</section-datatext>
<section-datavalue>10139</section-datavalue>
<section-percenttext>17.79</section-percenttext>
<section-percentvalue>17.793650515084</section-percentvalue>
<items>
<item id="Mexican" row="30" calc="False" datatype="dtInteger"
percenttype="dtPercent">
<item-description>Hispanic or Latino:</item-description>
<item-originaldescription>Hispanic or Latino:</item-originaldescription>
<item-datatext>10,139</item-datatext>
<item-datavalue>10139</item-datavalue>
<item-percenttext>17.79</item-percenttext>
<item-percentvalue>17.793650515084</item-percentvalue>
</item>
<item id="PuertoRican" row="31" calc="False" datatype="dtInteger"
percenttype="dtPercent">
<item-description>Hispanic or Latino:</item-description>
<item-originaldescription>Hispanic or Latino:</item-originaldescription>
<item-datatext>10,139</item-datatext>
<item-datavalue>10139</item-datavalue>
<item-percenttext>17.79</item-percenttext>
<item-percentvalue>17.793650515084</item-percentvalue>
</item>
<item id="Cuban" row="32" calc="False" datatype="dtInteger"
percenttype="dtPercent">
<item-description>Hispanic or Latino:</item-description>
<item-originaldescription>Hispanic or Latino:</item-originaldescription>
<item-datatext>10,139</item-datatext>
<item-datavalue>10139</item-datavalue>
<item-percenttext>17.79</item-percenttext>
<item-percentvalue>17.793650515084</item-percentvalue>
</item>
<item id="AllOtherHispanicOrLatino" row="33" calc="False" datatype="dtInteger"
percenttype="dtPercent">
<item-description>Hispanic or Latino:</item-description>
<item-originaldescription>Hispanic or Latino:</item-originaldescription>
<item-datatext>10,139</item-datatext>
<item-datavalue>10139</item-datavalue>
<item-percenttext>17.79</item-percenttext>
<item-percentvalue>17.793650515084</item-percentvalue>
</item>
</items>
</section>
</sections>
</group>
The flawed output of this section:
2013 Est. Pop Hisp or Latino by Origin 56,981
Not Hispanic or Latino 46,842 82.21
Hispanic or Latino: 10,139 17.79
Hispanic or Latino: 10,139 17.79
Hispanic or Latino: 10,139 17.79
Hispanic or Latino: 10,139 17.79
Hispanic or Latino: 10,139 17.79
The problem:
Notice how the <item> elements within the <items> element are being duplicated, instead of distinctively processed. This is very odd, since in the XSLT, the very same code works for the group/groups and section/sections element used directly above it. I process it using MSXSL or IE9 or Firefox 14, but get the same results... Am I overlooking something simple?
Thanks in advance!
jdb
You can see the processed file in action (3rd Group Down) at:
http://www.theretailcoach.net/downlo..._RTA_Demos.xml
Right click on these files to view the sources:
http://www.theretailcoach.net/downlo..._RTA_Demos.xml
http://www.theretailcoach.net/downlo.../demos2013.xsl
http://www.theretailcoach.net/downlo.../demos2013.css