XSL XML Nesting for Each Loop

I am having trouble reading my nested for each loop. For some reason, it does not go in cycles under direct nodes. The problem seems to be related to bindings. My first loop happens after I open the table and I browse the whole table for admin reports and paste it under the node. This works fine, but when I find the nest of additional nodes below, I can pull out the values, but not specific to the parent node. My eyes are bleeding pretty much from this exercise, can someone provide 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> 
+6
source share
1 answer

What you do 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 of them is in no way connected with the first. The same thing happens with your third for everyone.

Not current() will not give you the current iteration node.

You can rewrite your first two for each of them as follows:

 <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> 

A third can be used with your current design. Since current() is local to each for each, therefore your third for each has no idea of ​​the other two. Also, your design seems to use xslt as a programming language that is not suitable.

Finally, try providing some completed / compiled examples next time, as well as your target document.

+7
source

Source: https://habr.com/ru/post/903382/


All Articles