Avatar billede tybz Nybegynder
29. oktober 2007 - 08:13 Der er 3 kommentarer og
1 løsning

Opret tæller. brug af tæller og nustilling af tæller.

Jeg læser ud fra en side med sectioner hvor der er 2 forskellige typer.
En med sektioner der fylder 100% i breden og en med sektioner som er 33% i breden og så er der 3 ved siden af hinanden.
Efter de forskellige sektioner skal der så være en splitter gif.

Problemet er så at jeg ikke kan finde ud af at lave en tæller i XSL der kan tælle hvornår sektionen med type = 1 har kørt 3 gange og så udskrive giffen og nulstille tælleren igen.

Jeg har lavet en udsnit af koden herunder.

<xsl:for-each select="sections/section[position() &gt; 1]">
    <xsl:if test="type = 0">
        <div class="teasertype0" id="count{count}">
            Html....
        </div>
        <img src="gfx/splitter_horizontal.gif"/>
    </xsl:if>
    <xsl:if test="type = 1">
        <div class="teasertype1" id="count{count}">
            Html....
        </div>
        Her vil jeg gerne have en splitter når denne type = 1 har kørt 3 gange i streg
    </xsl:if>
</xsl:for-each>
Avatar billede janegil Nybegynder
29. oktober 2007 - 11:37 #1
Du skal ikke bruke noen teller, du skal teste på om position() mod 3 = 0 eller lignende.

Du skal også komme ut av uvanen med for-each. XSLT-programmering er fundamentalt annerledes en Java og Visual Basic og FORTRAN og COBOL og sånt. Ikke nødvendigvis bedre, men VELDIG annerledes. Ikke lenk loops og if/then/else. Tenk pattern matching.

Så du skal heller bare ha én selcet på
section[position() mod 3 = 2]
og en annen select på
section[position() mod 3 <> 2]

resten left as an exercise...
Avatar billede tybz Nybegynder
29. oktober 2007 - 12:22 #2
Jeg kan jo ikke bruge position da jeg ikke ved om der har været 4 type = 0 før der kommer 3 type 1 i streg.
Derfor skal der i type = 1 tælles op hver gang.
Avatar billede jokkejensen Novice
14. november 2007 - 17:02 #3
Hvis du som janegil skriver benytter position() mod 3, vil du få resultatet:

1
2
3
1
2
3
1
2
3

og hermed klare opgaven.

Prøv selv med:

<xsl:for-each select="sections/section[position() &gt; 1]">
<xsl:value-of select="position() mod 3" />
</xsl:for-each>

Så laver du bare en if sætning, xsl:if test="position mod 3 = 3"

/JJ
Avatar billede tybz Nybegynder
15. november 2007 - 08:17 #4
Som jeg før har svaret virker dette kun hvis der er 1 type.
Jeg har selv fundet en løsning hvor jeg laver en funktion som kaldes hver gang denne type er der og den returnere så sig selv + 1 og når den kommer til 3 så nulstilles den.
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