Nested for-each loops in XSLT not working

假装没事ソ 提交于 2019-12-07 01:16:49

问题


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


回答1:


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


来源:https://stackoverflow.com/questions/23530495/nested-for-each-loops-in-xslt-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!