如何嵌套xsl:for-each选择

时间:2009-10-28 14:27:46

标签: xml xslt nested foreach

HI!

我的XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<Dokument>
        <Skupina id="3">
            <Naziv_skupine>RAZSTAVNI PROSTOR</Naziv_skupine>
                    <Dvorana id="295">
                    <Naziv_dvorane>DVORANA  C</Naziv_dvorane>
                        <Postavka id="41">
                            <Artikel>1105</Artikel>
                        </Postavka>
                    </Dvorana>

                    <Dvorana id="281">
                    <Naziv_dvorane>DVORANA A</Naziv_dvorane>
                        <Postavka id="41">
                            <Artikel>1102</Artikel>
                        </Postavka>
                    </Dvorana>
        </Skupina>


        <Skupina id="86">
            <Naziv_skupine>UPORABNINA PROSTORA, TEHNIČNE OPREME IN OSEBJA</Naziv_skupine>
                    <Dvorana id="295">
                    <Naziv_dvorane>DVORANA  C</Naziv_dvorane>
                        <Postavka id="41">
                            <Artikel>2100</Artikel>
                        </Postavka>
                    </Dvorana>
        </Skupina>


</Dokument>

我的XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <table border="1">

    <xsl:for-each select="Dokument/Skupina">
    <tr>
        <td align="left" colspan="7" valign="top"><xsl:value-of select="Naziv_skupine"/></td>
        </tr>

        <xsl:for-each select="/Dokument/Skupina/Dvorana">
      <tr>
        <td align="left" colspan="7" valign="top"><xsl:value-of select="Naziv_dvorane"/></td>
      </tr>
        <xsl:for-each select="/Dokument/Skupina/Dvorana/Postavka">
          <tr>
            <td valign="top"><xsl:value-of select="Artikel"/></td>                      
          </tr>
        </xsl:for-each>
     </xsl:for-each>
     </xsl:for-each>

    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

结果:

RAZSTAVNI PROSTOR
  DVORANA C
    1105
    1102
    2100
  DVORANA A
    1105
    1102
    2100
  DVORANA C
    1105
    1102
    2100
UPORABNINA PROSTORA, TEHNIČNE OPREME IN OSEBJA
  DVORANA C
    1105
    1102
    2100
  DVORANA A
    1105
    1102
    2100
  DVORANA C
    1105
    1102
    2100

但我希望结果如下:

RAZSTAVNI PROSTOR
  DVORANA C
    1105
  DVORANA A
    1102
UPORABNINA PROSTORA, TEHNIČNE OPREME IN OSEBJA
  DVORANA C
   2100

我哪里出错?

谢谢!

汤姆

1 个答案:

答案 0 :(得分:5)

在第二个for-each中,尝试更改此路径

/Dokument/Skupina/Dvorana/Postavka

./Postavka

您希望在第一个指向的节点处继续第二个for-each循环。您正在做的是从根目录重新选择所有节点,因为您指定了/ Dokument /....