Nested for-each loops in XSLT not working
26,318
The outer loop puts you in the context of ep
. The context of the inner loop needs to be established from there (or as an absolute path, starting from the root) - so change:
<xsl:for-each select="dalehoward/ep/tracks">
to:
<xsl:for-each select="tracks/track">
Author by
user3614312
Updated on January 10, 2020Comments
-
user3614312 over 4 years
I cant seem to get this nested for loop to work correctly, I want to print all of the tracks on the EP in the row with the EP name and other details. Everything from the first for-each loop displays correctly but nothing is pulled through for the for-each loop to get the tracks.
Here is my XML
<dalehoward> <ep> <name>Letters EP</name> <year>2012</year> <label>Static Audio</label> <image>letters.jpg</image> <tracks> <track number="1"> <tname>Letters</tname> <length>6.35</length> </track> <track number="2"> <tname>Later</tname> <length>7.56</length> </track> <track number="3"> <tname>'89 Flava</tname> <length>7:38</length> </track> <track number="4"> <tname>Safe Presentation</tname> <length>7.55</length> </track> </tracks> </ep> <ep> <name>Inner City EP</name> <year>2012</year> <label>Lost My Dog</label> <image>innercity.jpg</image> <tracks> <track number="1"> <tname>C'Mon</tname> <length>7.15</length> </track> <track number="2"> <tname>Koppabird</tname> <length>6.27</length> </track> <track number="3"> <tname>Inner City</tname> <length>8:50</length> </track> <track number="4"> <tname>You Can</tname> <length>8:16</length> </track> <tracks> </ep> <dalehoward>
and here is the XSLT
<xsl:variable name="imagefolder" select="'xml/images/'" /> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1" width="100%"> <tr bgcolor="#9acd32"> <th style="text-align:left">Title</th> <th style="text-align:left">Year</th> <th style="text-align:left">Label</th> <th style="text-align:left">Tracks</th> <th style="text-align:left">Artwork</th> </tr> <xsl:for-each select="dalehoward/ep"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="year"/></td> <td><xsl:value-of select="label"/></td> <td>testtext<xsl:for-each select="dalehoward/ep/tracks"> <xsl:value-of select="tname"/><br /> <xsl:value-of select="length"/> <br /><br /> </xsl:for-each></td> <td><img width="150px" height="150px"><xsl:attribute name="src"> <xsl:copy-of select="$imagefolder"/> <xsl:value-of select="image"/> </xsl:attribute></img></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Thanks a lot in advance for any help