I am having trouble reading out my nested for-each loops. For some reason, it doesn't loop under the direct nodes. The trouble seems to be with the tages.My first loop happens after I open the table, and I loop through the whole table for the admin reports and nest the second node underneath it. This works fine, but when I go to nest additional nodes underneath, I am able to pull the values, but not specific to the parent node. My eyes are pretty much bloodshot from this exercise, could someone lend some help. Thanks in advance.
XSL:
<tr bgcolor="9acd32">
<table><th>Data Source Name:</th></table>
<table><th><xsl:value-of select="@Value"/> </th></table>
</tr>
<tr>
<xsl:for-each select="*[name()='PartInformation']">
<table bgcolor="#99ff66"><th>Part Information:</th></table>
<table bgcolor="#99ff66"><th><xsl:value-of select="@Value"/></th></table>
<tr>
<xsl:for-each select="*/*[name()='InspPrgInformation']">
<table bgcolor="#33ccff"><th>Inspection Program ID:</th></table>
<table bgcolor="#33ccff"><th><xsl:value-of select="@Value"/></th></table>
<table bgcolor="#33ccff"><th><xsl:value-of select="@NoOfTracefields"/></th></table>
</xsl:for-each>
</tr>
</xsl:for-each>
</tr>
<tr>
<xsl:for-each select="*/*/*[name()='AreaInformation']">
<table bgcolor="#FFFF99"><th>Area Information:</th></table>
<table bgcolor="#FFFF99"><th><xsl:value-of select="@Area"/></th></table>
<table bgcolor="#FFFF99"><th><xsl:value-ofselect="@AreaCount"/>
</th></table>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</center>
XML:
<AdminReports xmlns="30/11/2011 09:25:58">
<AdminReport ID="1">
<DataSourceInformation DataSourceID="2" Value="DCS_AERO_KINSTON_DCS350">
<PartInformation PartID="8" Value="WithAreaInfo">
<InspPrgInformation InspPrgID="10" Value="DCS350_Sec15Drill_Pannel1WithInfo" NoOfTracefields="1">
<AreaInformation Area="L3" AreaCount="59"/>
<AreaInformation Area="L4" AreaCount="45"/>
<AreaInformation Area="LT4" AreaCount="54"/>
</InspPrgInformation>
</PartInformation>
<PartInformation PartID="9" Value="NoAreaInfo">
<InspPrgInformation InspPrgID="9" Value="DCS350_Sec15Trim_Pannel1" NoOfTracefields="0"/>
</PartInformation>
</DataSourceInformation>
</AdminReport>
<AdminReport ID="2">
<DataSourceInformation DataSourceID="2" Value="DCS_AERO_KINSTON_DCS350">
<PartInformation PartID="8" Value="NoAreaInfo">
<InspPrgInformation InspPrgID="10" Value="WithInfo" NoOfTracefields="1">
</InspPrgInformation>
</PartInformation>
<PartInformation PartID="9" Value="AreaInfo">
<InspPrgInformation InspPrgID="9" Value="DCS350_Sec15Trim_Pannel1" NoOfTracefields="0">
<AreaInformation Area="L4" AreaCount="75"/>
<AreaInformation Area="LT4" AreaCount="4"/>
</InspPrgInformation>
</PartInformation>
</DataSourceInformation>
</AdminReport>
</AdminReports>
What you are doing is wrong for what you want to achieve:
<xsl:for-each select="*[name()='PartInformation']">
<table bgcolor="#99ff66"><th>Part Information:</th></table>
<table bgcolor="#99ff66"><th><xsl:value-of select="@Value"/></th></table>
<tr>
<xsl:for-each select="*/*[name()='InspPrgInformation']">
<table bgcolor="#33ccff"><th>Inspection Program ID:</th></table>
<table bgcolor="#33ccff"><th><xsl:value-of select="@Value"/></th></table>
<table bgcolor="#33ccff"><th><xsl:value-of select="@NoOfTracefields"/></th></table>
</xsl:for-each>
</tr>
</xsl:for-each>
The second for each is by no means related with the first one. Same goes with your third for-each.
Do not the the current()
will give you the currently iterated node.
You could rewrite your first two for-each like this :
<tr>
<xsl:for-each select="*[name()='PartInformation']">
<tr>
<xsl:for-each select="current()/*/InspPrgInformation">
<table bgcolor="#33ccff">
<th>Inspection Program ID:</th>
</table>
<table bgcolor="#33ccff">
<th>
<xsl:value-of select="@Value"/>
</th>
</table>
<table bgcolor="#33ccff">
<th>
<xsl:value-of select="@NoOfTracefields"/>
</th>
</table>
</xsl:for-each>
</tr>
</xsl:for-each>
</tr>
The third one can be used with your current design. Because current()
is local to each for-each, so your third for-each has no idea about the other two. In addition your design seems to be using xslt as a programming language which is not the way to go.
Finally try to provide some complete/compilable examples next time as well as your target document.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With