[XSL] Count op node met dezelfde waarde

Pagina: 1
Acties:

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 28-11-2025

BierPul

2 koffie graag

Topicstarter
Ik heb het volgende XML voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
    <maanden>
        <maart>
            <deelnemer>Bas</deelnemer>
        </maart>
        <maart>
            <deelnemer>Pieter</deelnemer>
        </maart>
        <maart>
            <deelnemer>Kees</deelnemer>
        </maart>
        <april>
            <deelnemer>Bas</deelnemer>
        </april>
        <april>
            <deelnemer>Kees</deelnemer>
        </april>
    </maanden>
</root>


Nu probeer ik een overzicht te maken van deelnemers, daar wil vermelden of ze voor april ook ingepland staan.

In dit geval wil ik dus laten zien dat Pieter in april niet van de partij is maar de andere 2 wel.

Ik probeer dit met xsl goed te krijgen maar ik heb het idee dat de count functie niet wil ondersteunen wat ik wil (of iig hoe ik het probeer) :)

code:
1
2
3
4
5
6
7
8
9
10
11
<xsl:template match="/root/maanden">
<xsl:for-each select="maart">
    <xsl:choose>
        <xsl:when test="count(/root/maanden/april/deelnemer=deelnemer)=1">
            <xsl:value-of select="deelnemer"/> - Speelt volgende maand mee
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="deelnemer"/> - Speelt volgende niet mee
        </xsl:otherwise>
    </xsl:choose>
</xsl:for-each>


Iemand een idee hoe ik dit boven water kan krijgen.

Ja man


  • Pete
  • Registratie: November 2005
  • Laatst online: 31-10-2025
Ik denk dat je je xml verkeert hebt ingedeeld. Ik zou nl het volgende schema aanhouden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
    <maanden>
        <maart>
            <deelnemer>Bas</deelnemer>
            <deelnemer>Pieter</deelnemer>
            <deelnemer>Kees</deelnemer>
        </maart>
        <april>
            <deelnemer>Bas</deelnemer>
            <deelnemer>Kees</deelnemer>
        </april>
    </maanden>
</root>


Hoe je dan precies verder moet weet ik ook even niet precies

petersmit.eu


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 28-11-2025

BierPul

2 koffie graag

Topicstarter
phsmit schreef op dinsdag 17 januari 2006 @ 10:31:
Ik denk dat je je xml verkeert hebt ingedeeld. Ik zou nl het volgende schema aanhouden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
    <maanden>
        <maart>
            <deelnemer>Bas</deelnemer>
            <deelnemer>Pieter</deelnemer>
            <deelnemer>Kees</deelnemer>
        </maart>
        <april>
            <deelnemer>Bas</deelnemer>
            <deelnemer>Kees</deelnemer>
        </april>
    </maanden>
</root>


Hoe je dan precies verder moet weet ik ook even niet precies
Helaas ligt de XML niet binnen mijn bereik omdat ik hem extern van een applicatie aangeleverd krijg :(

Ik moet helaas roeien met de riemen die ik heb :(

Ja man


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik snap niet echt precies wat je wilt, maar het volgende verdeelt iig personen over maanden. Lijkt erop dat jij het precies andersom wilt, maar dat met soort van hetzelfde principe:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" > 

    <xsl:template match="//maanden">
        <xsl:apply-templates select="*[position()=1]" />
    </xsl:template>
    
    <xsl:template match="//maanden/*">
        <xsl:param name="vorige_maand" />
        <xsl:variable name="deze_maand" select="name()" />
        <xsl:variable name="deze_pos" select="position()" />
        <xsl:if test="$deze_maand != $vorige_maand">
            <br /><xsl:value-of select="$deze_maand" />: 
        </xsl:if>
        <xsl:value-of select="." />
        
        <xsl:apply-templates select="following-sibling::*[position()=1]">
            <xsl:with-param name="vorige_maand" select="$deze_maand" />
        </xsl:apply-templates>

    </xsl:template>

</xsl:stylesheet>

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 28-11-2025

BierPul

2 koffie graag

Topicstarter
thnx voor de reply, dit had ik ook al ongeveer voor elkaar :)

Maar nog niet echt precies wat ik wil. Wat ik wil is een lijst van deelnemers opmaken. en daarin aangeven speelt ie volgende maand nog mee

Dus in dit voorbeeld

Bas - ja
Pieter - nee
Kees - ja

Ik heb het in een iets andere context nodig maar dit is wat begrijpelijker uitgelegd zo :)

Ik wil dus door de eerste maand heenlopen en bij elke naam die ik tegenkom kijken of ie ook in de volgende maand aanwezig is.

Is ie aanwezig print ik ja , bij niet aanwezig print ik nee B)

Ja man