简体   繁体   中英

Nested for-each loops in XSLT not working

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM