Avatar billede brynil Nybegynder
31. december 2003 - 11:20 Der er 2 kommentarer og
1 løsning

Kuk i for-each

Jeg har brug for hjælp til at få dannet nogle nestede for-each der ikke, som nedenstående, gentager for mange gange. Jeg håber at det kan forstås udfra denne gengivelse.
Jeg er ny på området, så det jeg har brug for er nok mest at få fod på de allerede anvendte begreber.


--- XML ---
<A>
  <B>
      <b></b> <!-- Pri. Få gentag -->
      <C>
        <c></c> <!-- Sek. Flere gentag -->
        <D>
            <d1></d1>
            <d2></d2>
            <d3></d3>
            <d4></d4>
            <d5></d5>
            <KO>
              <k1></k1>
              <k2></k2>
              <k3></k3>
            </KO>
        </D>   
        <E>
            <e1></e1>
            <F> <!-- Elem. Mange gentag -->
              <G>
                  <t1></t1>
                  <t2></t2>
                  <t3></t3>
                  <t4></t4>
                  <t5></t5>
                  <t6></t6>
                  <KO>
                    <k1></k1>
                    <k2></k2>
                    <k3></k3>
                  </KO>
              </G>
              <H>
                  <t1></t1>
                  <t2></t2>
                  <t3></t3>
                  <t4></t4>
                  <t5></t5>
                  <t6></t6>
                  <KO>
                    <k1></k1>
                    <k2></k2>
                    <k3></k3>
                  </KO>
              </H>
            </F>
        </E>
      </C>
  </B>
</A>


--- XSL ---
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40" version="1.0">

<xsl:output method="html"/>

<xsl:template match="/">
<html><head><title>Test3</title></head>
<body>
  <table>

      <xsl:for-each select="A/B">
      <tr>
      <td>
        <xsl:value-of select="b"/>
      </td>
      </tr>
      <tr>
      <td>.</td>
      </tr>
      <tr>
      <td>
        <xsl:for-each select="/">
            <xsl:apply-templates select="A/B/C"/>
            <tr>
            <td>
              <xsl:for-each select="/">
                  <xsl:value-of select="c"/>
              </xsl:for-each>
            </td>
            </tr>           
        </xsl:for-each>
      </td>
      </tr>
  </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>

<xsl:template match="C">
<table >
  <tr><td></td></tr>
  <tr>
  <td bgcolor="#C0C000">
      <xsl:value-of select="c"/>
  </td>
  <td bgcolor="#C0C0C0">A-1te</td>
  <td bgcolor="#C0C0C0">A-2det</td>
  <td bgcolor="#C0C0C0">B-1te</td>
  <td bgcolor="#C0C0C0">B-2det</td>
  </tr>
      <xsl:for-each select="E/.">
  <tr>
  <td width="20%" rowspan="2">
      <xsl:value-of select="e1"/>
  </td>
  <td>
      <xsl:value-of select="F/G/t1"/>
  </td>
  <td>
      <xsl:value-of select="F/G/t2"/>
  </td>
  <td>
      <xsl:value-of select="F/H/t1"/>
  </td>
      <td><xsl:value-of select="F/H/t2"/>
  </td>
  </tr>
  <tr>
  <td colspan="2">
      <xsl:value-of select="F/G/t3"/>
  </td>
  <td colspan="2">
      <xsl:value-of select="F/H/t3"/>
  </td>
  </tr>
      </xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Avatar billede trolle Nybegynder
31. december 2003 - 17:42 #1
Som det står der vil du for hver <B>  få vist ALLE <C>'er for hele documentet.

Jeg tror du har en for-each for meget, ogg hvis du erstatter:

      <tr>
      <td>
        <xsl:for-each select="/">
            <xsl:apply-templates select="A/B/C"/>
            <tr>
            <td>
              <xsl:for-each select="/">
                  <xsl:value-of select="c"/>
              </xsl:for-each>
            </td>
            </tr>           
        </xsl:for-each>
      </td>
      </tr>

med:
        <tr>
          <td>
        <xsl:apply-templates/>
          <tr>
            <td>
              <xsl:for-each select="/">
            <xsl:value-of select="c"/>
              </xsl:for-each>
            </td>
          </tr>       
          </td>
        </tr>

bliver det til at du for hver <B> viser en række for de <C>'er der er i denne.
Avatar billede trolle Nybegynder
31. december 2003 - 17:45 #2
faktisk kan du vist strikke det helt ned til:

        <tr>
          <td>
        <xsl:apply-templates/>
          </td>
        </tr>

da der ikke er nogen børn med navnet 'c' i roden
      <xsl:for-each select="/">
            <xsl:value-of select="c"/>
      </xsl:for-each>

(select="/"  vælger roden!)
Avatar billede brynil Nybegynder
31. december 2003 - 18:11 #3
Hej trolle - den første virker perfekt, den anden udgave ser jeg på lidt senere. Der er meget at lære endnu!!

Tak for hjælpen og Godt Nytår :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester