Toon posts:

[XPath] Waarde uit element opzoeken

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Goedenavond!

Ik heb een probleem met XPath (V1.0).

Ik heb me zuur zitten zoeken, maar ik kan mijn eigen hulp niet vinden, dus bij deze.

Ik heb dit xml:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<Aanvraag>
    <Aanvrager Volgnummer="1">
        <RefPartijNAWData IDREF="ref2"/>
    </Aanvrager>
    <Aanvrager Volgnummer="2">
        <RefPartijNAWData IDREF="ref1"/>
    </Aanvrager>
    <PartijNAWData Volgnummer="1" ID="ref2">
        <Land>NL Nederland</Land>
    </PartijNAWData>
    <PartijNAWData Volgnummer="2" ID="ref1">
        <Land>DU Duitsland</Land>
    </PartijNAWData>
</Aanvraag>


Ervan uitgaande dat ik op het niveau van " Aanvrager[@Volgnummer="1"] " zit.

Nu is de aanvrager gekoppeld aan de PartijNAWData via de RefPartijNAWData naar de ID van de PartijNAWData.

Nu kan ik dit doen:
code:
1
/Aanvraag/PartijNAWData[@ID="ref2"]/Land   ( = 'NL Nederland' )


Dan krijg ik "NL Nederland", dat moet ik ook hebben. Mooi. Nu zit ik dus in Aanvrager1.
Met deze krijg ik het RefPartijNAWData van Aanvrager1:
code:
1
string(RefPartijNAWData/@IDREF)    ( = 'ref2' )

Kwestie van combineren zou je zeggen... MAAR:
Dit werkt dan weer niet:
code:
1
/Aanvraag/PartijNAWData[@ID=string(RefPartijNAWData/@IDREF)]/Land   ( = null )

:?
Het probleem is volgens mij dat de functie niet herkent wordt als "vergelijkende waarde" in het eerste pad.

Hoe moet ik dit dan doen??? Mis ik iets?
Ik kan helaas geen variabelen maken ofzo, ik moet het in één regel doen.
Ik ben geen expert op het gebied van xpath, maar meestal lukt het toch wel. Dit begrijp ik toch echt niet...

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Heb je het al met /Aanvraag/PartijNAWData[@ID=RefPartijNAWData/@IDREF]/Land geprobeerd?

Rustacean


Verwijderd

Topicstarter
Uiteraard.

Geen resultaten.

  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Heb je al met variabelen geprobeerd?

Dus
<xsl:variable name="temp"><xsl:value-of select="RefPartijNAWData/@IDREF"/></xsl:variable>
<xsl:value-of select="/Aanvraag/PartijNAWData[@ID=$temp]/Land"/>

Het probleem lijk me namelijk dat de context wisselt.In
/Aanvraag/PartijNAWData[@ID=string(RefPartijNAWData/@IDREF)]/Land
wordt RefPartijNAWData/@IDREF genomen tov /Aanvraag/PartijNAWData. Aangezien daar geen RefPartijNAWData bestaat krijg je ook geen resultaat. Mbv variabelen omzeil je dit probleem.

I'm not a complete idiot - several parts are missing.


  • LvdO
  • Registratie: Augustus 2005
  • Laatst online: 20-05-2024
Netter zou zijn om current() te gebruiken als je idd in XSL werkt:

code:
1
/Aanvraag/PartijNAWData[@ID=current()/@IDREF]/Land

Xopus


Verwijderd

Topicstarter
WvdWest schreef op woensdag 28 februari 2007 @ 08:18:
Het probleem lijk me namelijk dat de context wisselt.In
/Aanvraag/PartijNAWData[@ID=string(RefPartijNAWData/@IDREF)]/Land
wordt RefPartijNAWData/@IDREF genomen tov /Aanvraag/PartijNAWData. Aangezien daar geen RefPartijNAWData bestaat krijg je ook geen resultaat. Mbv variabelen omzeil je dit probleem.
Klopt. Dat is precies het probleem. Doordat ik eerst naar de andere node "toeloop", namelijk PartijNAWData, ben ik mijn "current" node, namelijk Aanvrager kwijt. Terughalen via " ./ " of " self ", of de andere node benaderen via " ../ " of " // " werkt allemaal niet.

XSL en variabelen heb ik allemaal geen toegang toe in deze situatie. Deze xpath condities moeten namelijk ook zelf in een xml gezet worden als attribuut en daar zitten nou eenmaal beperkingen aan. Alleen XPath helaas dus.

Ik moet proberen de andere node te bereiken zonder mijn context te veranderen op één of andere manier...
Ik ga wel verder ploeteren. Bedankt voor de moeite allen!
Pagina: 1