[XSLT]Unieke attributen selecteren als attribuut in HTML

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een project(je) voor mijn opleiding, waarin ik kennis leer maken met XML, XSLT, xHTML enz.

Hierin loop ik tegen een probleem aan, en het lukt me niet om dit op te lossen.

Het zit als volgt:

In de XML:
XML:
1
2
3
4
5
6
7
8
<city>
    <locations>
        <location category="cat1" />
        <location category="cat1" />
        <location category="cat2" />
        <location category="cat3" />
    </locations>
</city>


Nu wil ik in de output html:
XML:
1
2
3
4
5
6
7
8
9
10
<div id="cat1">
    [...informatie over de eerste locatie van cat 1..]
    [...informatie over de tweede locatie van cat 1..]
</div>
<div id="cat2">
    [...informatie over de eerste locatie van cat 2..]
</div>
<div id="cat3">
    [...informatie over de eerste locatie van cat 3..]
</div>


Als ik echter simpelweg gebruik maak van '<div id="{@category}" >' dan krijg ik natuurlijk 2 divs met cat1 als ID en twee divs met respectievelijk cat2 en cat3 als ID.

Ik probeerde het volgende werkend te krijgen:

XML:
1
2
3
<xsl:template match="locations/location">
    <div id="{@category[not(@category = preceding-sibling::location/@category)]}" ></div>
</xsl:template>


Dit gaat denk ik niet werken (los van het feit of die XPath expressie klopt) omdat hij een div moet maken waar de informatie voor meerdere instanties van de betreffende categorie in komen. Nu is mijn vraag natuurlijk hoe ik het voor elkaar kan krijgen dat ik één div voor elke categorie kan hebben met de categorie naam als ID.

Acties:
  • 0 Henk 'm!

  • keesdewit
  • Registratie: December 2003
  • Laatst online: 19-06 20:46
Probeer het eens met een for loop:
http://www.w3schools.com/xsl/xsl_for_each.asp


XML:
1
2
3
4
5
<xsl:template match="locations/location"> 
   <xsl:for-each select="locations/location[not(@category = preceding-sibling::location/@category)]">
       <div id="{@category}" ></div> 
   </xsl:for-each>
</xsl:template> 


(onder voorbehoud van je eigen xPath expressie)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Daar had ik ook aan zitten denken. Het enige wat ik dan niet voor elkaar krijg, is dat hij dan ook de inhoud in de juiste categorie in de juiste div zet.

Het huidige effect wat ik krijg is:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
    <div id="cat1">
        <locatie1></locatie1>
    </div>
    <div id="cat1">
        <locatie2></locatie2>
    </div>
    <div id="cat2">
        <locatie3></locatie3>
    </div>
    <div id="cat3">
        <locatie4></locatie4>
    </div>


Na een lange zoektocht ben ik er uit gekomen:

XML:
1
2
3
4
5
6
7
8
    <xsl:for-each-group select="./location" group-by="@category">
            <div id="{current-grouping-key()}";">
                <xsl:for-each select="current-group()">
                    <xsl:apply-templates select="." />
                </xsl:for-each>
            </div>
        </xsl:for-each-group>
    </xsl:template>

[ Voor 81% gewijzigd door Verwijderd op 07-03-2011 14:15 ]