[XML/XSL] Probleempje met meerdere tags van 1 naam

Pagina: 1
Acties:

  • Krukar
  • Registratie: September 2001
  • Laatst online: 19-08 16:27
Ik ben, na een tijdje stoeien met xml/xsl, tegen een probleempje aangelopen:

Ik ben bezig met een systeem, waarmee gemakkelijk tutorials gemaakt kunnen
worden in xml, en dat zet ik dan met xsl om in de layout van mijn site.

Wat ik wil maken is zeg maar, dat het in de xml file onderverdeeld is in hoofdstukken, en in die hoofdstukken staat elke regel tekst tussen <line> en </line>, nu komt het probleem, met een for-each loop krijg ik maar 1 line uit de xml file.

Een stukje uit mijn xml file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<hoofdstuk>
   <hnummer>0</hnummer>
   <htitel>Inleiding</htitel>
   <line>tekst</line>
   <line>nog meer tekst</line>
</hoofdstuk>
<hoofdstuk>
   <hnummer>1</hnummer>
   <htitel>Voorbeeld hoofdstuk</htitel>
   <line>weer wat tekst
   <line>en nog wat tekst</line>
</hoofdstuk>


En een stukje uit mijn xsl file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<xsl:for-each select="tutorial/hoofdstuk">
   <xsl:if test="hnummer>'1'">
      <table>
      <tr>
      <td>Hoofdstuk</td> 
      <td>
      <xsl:value-of select="hnummer" /> 
      :  
      </td>
      <td>
      <xsl:value-of select="htitel" /> 
      </td>
      </tr>
      </table>
      <br /> 
   </xsl:if>
   <xsl:if test="hnummer='0'">
      <xsl:value-of select="htitel" /> 
      <br /> 
   </xsl:if>
   <xsl:value-of select="line" /> 
   <br /> 
</xsl:for-each>

Enkel de bovenste line komt hiermee dus eruit.

Ik heb al geprobeerd om alle tekst tussen één line tag te zetten, en <br /> na elke regel, maar de <br /> werkte niet, ook via een entity in de dtd heb ik dit geprobeerd, dmv $br; te laten replacen met <br />.

Iemand een idee? Ik zou je heel dankbaar zijn :)

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
code:
1
2
3
4
5
<xsl:apply-templates select="line"/> <!-- ipv value-of -->
...
<xsl:template select="line">
  <xsl:value-of select="."/><br/>
</xsl:template>

je kunt trouwens beter templates gebruiken ipv for-each.

[ Voor 98% gewijzigd door marcusk op 19-12-2002 01:08 ]


  • Krukar
  • Registratie: September 2001
  • Laatst online: 19-08 16:27
marcusk schreef op 19 December 2002 @ 00:54:
code:
1
2
3
4
5
<xsl:apply-templates select="line"/> <!-- ipv value-of -->
...
<xsl:template select="line">
  <xsl:value-of select="."/><br/>
</xsl:template>

je kunt trouwens beter templates gebruiken ipv for-each.
Thanks _/-\o_ _/-\o_
Dit werkt perfect, ik zal direct alle for-each loops omzetten naar templates :)