[XPath] Attribuut gelijk aan attribuut

Pagina: 1
Acties:

  • Victor
  • Registratie: November 2003
  • Niet online
Allereerst, mijn excuses voor de volslagen onduidelijke topictitel, meer kon ik er niet van maken. ;)

Dan nu mijn probleem: ik wil een XPath expressie maken waarbij ik een element selecteer op basis van een attribuut van dat element en de waarde van dat attribuut moet gelijk zijn aan dat van een attribuut binnen mijn contextnode.

Aangezien dat ook nog wat onduidelijk is, een voorbeeldje:
XML:
1
2
3
4
5
6
7
8
<appels>
    <appel kleur="groen" prijs="5.00"/>
    <appel kleur="rood" prijs="3.00"/>
</appel>

<peren>
    <peer kleur="groen" prijs="4.00"/>
</peren>


Aangezien ik graag appels met peren vergelijk (en dan met name wat ze kosten), wil ik nu een appel waarvan de kleur hetzelfde is als de peer en hier zit het probleem:
XML:
1
//appels/appel[@kleur=./@kleur]/@prijs


Voor de duidelijkheid, bovenstaande XPath expressie werk dus niet, maar het is hopelijk wel duidelijk wat ik nu wil: de prijs van de appel waarvan de kleur hetzelfde is als mijn peer (m'n contextnode).

Ik kom er eerlijk gezegd niet uit, hoe toets ik de waarde van het ene attribuut tegen het ander? Ik geef voor de kleur van mijn peer nog duidelijk aan dat het om het kleur attribuut gaat van m'n contextnode (./), maar ook dat mag niet baten.

Waarschijnlijk zie ik iets over het hoofd en is het gruwelijk simpel, maar ik zie het niet. :)

Verwijderd

Is dit in XSLT? Dan zou je eventueel de current() functie kunnen proberen:
http://developer.mozilla.org/en/docs/XPath:Functions:current

Dan wordt jouw expressie:
code:
1
//appels/appel[@kleur=current()/@kleur]/@prijs

  • Victor
  • Registratie: November 2003
  • Niet online
Verwijderd schreef op dinsdag 26 december 2006 @ 15:30:
Is dit in XSLT? Dan zou je eventueel de current() functie kunnen proberen:
http://developer.mozilla.org/en/docs/XPath:Functions:current

Dan wordt jouw expressie:
code:
1
//appels/appel[@kleur=current()/@kleur]/@prijs
Verdomd, dat werkt! Heel erg bedankt :)

Wel raar overigens dat current() wel werkt en "." niet... Er staat immers:
The current node is always the same as the context node. The following two are symantically equivalent.

<xsl:value-of select="current()"/>

<xsl:value-of select="."/>
Curieus :P

Niet zo curieus dus, als je de TR er op na slaat:
However, within square brackets the current node is usually different from the context node...

[ Voor 15% gewijzigd door Victor op 26-12-2006 15:38 ]