Toon posts:

[xsl] Tabel uitvullen met data

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een beetje aan het spelen met xml en xsl.
Nu zit ik met een probleem. De output is niet gelijk aan mijn verwachting en ik begrijp niet goed wat ik fout doe.
xml:
code:
1
2
3
4
5
6
7
8
9
<xml>   
  <RowLength>12</RowLength>
  <Items>

    <Item>waarde A1</Item><Item>waarde 2</Item><Item>waarde 3</Item><Item>waarde 4</Item><Item>waarde 5</Item><Item>waarde 6</Item><Item>waarde 7</Item><Item>waarde 8</Item><Item>waarde 9</Item><Item>waarde 10</Item><Item>waarde 11</Item><Item>waarde 12</Item>
    <Item>waarde B1</Item><Item>waarde 2</Item><Item>waarde 3</Item><Item>waarde 4</Item><Item>waarde 5</Item><Item>waarde 6</Item><Item>waarde 7</Item><Item>waarde 8</Item><Item>waarde 9</Item><Item>waarde 10</Item><Item>waarde 11</Item><Item>waarde 12</Item>
    <Item>waarde C1</Item><Item>waarde 2</Item><Item>waarde 3</Item><Item>waarde 4</Item><Item>waarde 5</Item><Item>waarde 6</Item><Item>waarde 7</Item><Item>waarde 8</Item><Item>waarde 9</Item><Item>waarde 10</Item><Item>waarde 11</Item><Item>waarde 12</Item>
  </Items>
</xml

xsl:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<Table border="1">
      <xsl:variable name="RowLength" select="/xml/RowLength"/>
      <xsl:for-each select="/xml/Items/Item">
        <xsl:if test="(position() mod $RowLength) = 1">
          <tr>
            <td>
              <xsl:value-of select="../Item[position()]"/>""
              <xsl:value-of select="position()"/>  
            </td>
          </tr>
        </xsl:if>
      </xsl:for-each>
    </Table>


output verkregen:
waarde A1"" 1
waarde A1"" 13
waarde A1"" 25

output verwacht:
waarde A1"" 1
waarde B1"" 13
waarde C1"" 25

Uit de bovenstaande verkregen output leidt ik af dat de 'variabele' positie wel goed staat maar op een of andere manier wordt toch steeds de waarde van het eerste item getoond. Kan iemand mij uitleggen wat ik fout doe?

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

code:
1
2
3
4
5
6
7
8
            <td>
            <!-- get the context 
                   node (self) instead of 
                   the first Item element (which is ../Item)
             -->
              <xsl:value-of select="."/>"" 
              <xsl:value-of select="position()"/>  
            </td>

Sundown Circus


Verwijderd

Topicstarter
RedRose schreef op maandag 29 mei 2006 @ 12:01:
code:
1
2
3
4
5
6
7
8
            <td>
            <!-- get the context 
                   node (self) instead of 
                   the first Item element (which is ../Item)
             -->
              <xsl:value-of select="."/>"" 
              <xsl:value-of select="position()"/>  
            </td>
Werkt perfect bedankt. Kun je me toevallig ook uitleggen waarom die manier die ik gebruikte niet werkt?

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Ik weet t niet zeker, maar volgens mij werkt een predicate ( de [] haken) in combinatie met de ../ die je gebruikte dat de position altijd 1 is, omdat de predicate dan altijd uitgaat van de parent node (../) - axis, ongeacht of je in een for-each zit of niet.

Dit werkt volgens mij ook:

code:
1
2
3
4
5
6
7
8
9
10
11
<xsl:for-each select="/xml/Items/Item">
    <xsl:variable name="current" select="position()" />
    <xsl:if test="(position() mod $RowLength) = 1">
        <tr>
            <td>
                      <xsl:value-of select="../Item[position()=$current]"/>""
                      <xsl:value-of select="position()"/>  
             </td>
         </tr>
    </xsl:if>
</xsl:for-each>

Sundown Circus