Как вкладывать xsl: for-each selec - PullRequest
       4

Как вкладывать xsl: for-each selec

2 голосов
/ 28 октября 2009

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

Где я могу ошибаться?

Спасибо!

Tom

1 Ответ

5 голосов
/ 28 октября 2009

Во втором для каждого, попробуйте изменить этот путь

/Dokument/Skupina/Dvorana/Postavka

до

./Postavka

Вы хотите продолжить второй цикл for-each в узле, на который указывает первый. Что вы делаете, это повторно выбираете все узлы из корня, так как вы указываете /Dokument/....

...