[XSL] param werkt de eerste keer niet goed?

Pagina: 1
Acties:

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-05 13:50
Ik zit lekker in de XSL problemen deze week; de volgende!

Ik heb een template wat aan de hand van "aantal" en "start" parameters een aantal dingen uit m'n XML file laat zien. Dit doe ik alsvolgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<xsl:template name="displayjobs"> 
  <xsl:param name="index"/>
  <xsl:param name="displayed"/>

  <xsl:if test="/GLKS/JOBLIST/job[$index]">
      <xsl:call-template name="displayjob">
        <xsl:with-param name="index" select="$index"/>
        <xsl:with-param name="displayed" select="$displayed + 1"/>
      </xsl:call-template>
  </xsl:if>

  <xsl:if test="$displayed &lt; $displayjobs"> 
      <xsl:call-template name="displayjobs"> 
        <xsl:with-param name="index" select="$index + 1"/>
        <xsl:with-param name="displayed" select="$displayed + 1"/>
      </xsl:call-template>
  </xsl:if>
</xsl:template>


Okay alles goed en wel, dit is nog redelijk rechtoe, rechtaan. Ik roep het template aan:

code:
1
2
3
4
5
6
7
8
9
10
<xsl:template name="viewlist">
    <table class="joblist" border='1'>

        <xsl:call-template name="displayjobs"> 
            <xsl:with-param name="index" select="$start"/>
            <xsl:with-param name="displayed" select="1"/>
        </xsl:call-template>

    </table>
</xsl:template>


En check door wat uitvoer even of de juiste index wordt meegegeven (de $start parameter wordt uit de URL gehaald), ook allemaal in orde.
Wat blijkt nu tot m'n grote verbazing; het "displayjob" template laat bij elke $start waarde het eerste XML element altijd zien (het element dat als eerst in de XML file staat). Voer ik bijvoorbeeld start=20 in, dan krijg ik te zien: element 1, element 21, element 22 etc. Het vage is dat dat niet zo is wanneer ik in plaats van $start gewoon 20 invul; dan werkt het ineens wel. Wie weet raad?

Even voor extra duidelijkheid; in het "displayjob" template doe ik dit als check:
code:
1
2
3
   <xsl:param name="index" />
   <xsl:variable name="job" select="/GLKS/JOBLIST/job[$index]"/>
test: <xsl:value-of select="$index"/> =ID: <xsl:value-of select="$job/ID"/><br/>


En wat krijg je dan als uitvoer met start=1:
code:
1
2
3
4
test: 1 =ID: 605
test: 2 =ID: 456
test: 3 =ID: 455
test: 4 =ID: 458


start=21
code:
1
2
3
4
5
test: 21 =ID: 605
test: 22 =ID: 475
test: 23 =ID: 476
test: 24 =ID: 477
test: 25 =ID: 478


start=41
code:
1
2
3
4
5
test: 41 =ID: 605
test: 42 =ID: 493
test: 43 =ID: 496
test: 44 =ID: 497
test: 45 =ID: 498


Dat die eerste ID code afwijkend is ligt trouwens aan de database, dat hoort zo.

[ Voor 62% gewijzigd door jsiegmund op 26-11-2004 17:29 ]


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Die $start, is dat een parameter van de volledige stylesheet? Heb je hem wel gedeclareerd als parameter?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-05 13:50
Helemaal bovenin het stylesheet staat:

<xsl:param name="start"/>

Ik moet er wel even bij vermelden dat dit in een stylesheet staat wat weer door een ander word aangeroepen (include), maar dat mag toch niet uit maken neem ik aan? Maakt het uit waar je die declaraties wegzet?

Ok, nog meer testen:

code:
1
2
3
4
5
<xsl:template name="viewjobs">
    Value: <xsl:value-of select="$index"/><br/>
    Index: <xsl:value-of select="/GLKS/JOBLIST/job[$index]/ID"/><br/>
    Goeie Index: <xsl:value-of select="/GLKS/JOBLIST/job[21]/ID"/><br/>
</xsl:template>


Levert dit:
code:
1
2
3
Value: 21
Index: 605
Goeie Index: 474


Wie snapt het nog? :?

Het is een ranzige oplossing, maar alles weggooien en opnieuw beginnen werkt altijd prima. Nu werkt het wel naar behoren, alleen balen dat ik geen idee heb wat er nu anders was :) Oh well, kan weer even door! Als er iemand hier: http://gathering.tweakers.net/forum/list_messages/980849 nog wat op weet? :)

[ Voor 71% gewijzigd door jsiegmund op 26-11-2004 20:50 ]