XPath attribute selectie probleem

Pagina: 1
Acties:

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
stel:

code:
1
2
3
<hello type="string">
   ....
</hello>


nu is mijn content node "hello" en nu wil ik weten of dat de type="string"

dus zou je denken

theAttribute = hello.XPath("@type='string'"); maar dit gaat niet.

if (theAttribute != null )... etc etc...


nu zoek ik all een tijd om een nodetest op de attributes van de huidige
context. Als je je afvraagd waarom is dit voor een parser...

Ik denk dat zoiets niet kan in XPath maar ik HOOP dat ik ernaast zit..

Verwijderd

Je kunt het op 2 manieren checken:

1: is de waarde van het type attribuut 'string'?
2: heeft het element een attribuut type met waarde 'string'?

Het eerste geval los je natuurlijk op door via XPath de waarde van het attribuut op te vragen:
hello@type

Het tweede geval is als volgt:
hello[@type="string"]

Ik zou niet weten in welke taal je die code hierboven hebt geschreven, dus daar kan ik je in ieder geval niet mee verder helpen.

[ Voor 3% gewijzigd door Verwijderd op 25-01-2003 19:38 . Reden: was een @ vergeten.. ]


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
helaas werkt dat alleen als 'hello' niet de huidige context is maar een child.

die tweede werkt alleen op:

code:
1
2
3
  <context>
     <hello = "string" />
  </content>


en je doet een context.XPath("hello[@type='string']");

aangezien hello eigenlijk is: child::hello[...] , maar eens dat je al
'IN' hello zit ben je gezien denk ik.

de programeer taal doet er ook niet toe: Xpath is xpath waar ook.

sigh :) wordt het weer van dit

code:
1
2
3
4
5
6
7
8
9
<onCurrent>
   <eval attribute="type" compare="=" to="string">
</>

ipv 

<onCurrent>
   <eval query="@type='string'">
</>


weet je ook ineens wat ik aan het doen ben :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Misschien kan het nog veel makkelijker, maar de self:: axis is vast een oplossing.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Voorbeeldje uit de standaard:
self::para selects the context node if it is a para element, and otherwise selects nothing
Ook kan je volgens mij gewoon een attribute axis gebruiken:
code:
1
attribute::type


Of in de verkorte syntax:
code:
1
@type

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je trouwens een beetje wilt klooien is dit werkelijk ideaal:

http://www.zvon.org/cgi-bin/xlab/bin/valueOf.py

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
ik ga effe een self::hello[@type='string'] werkt wel MAAR dan moet je weer de de nodename
weten. gelukkig denk ik dat ik daar aan kan komen :)

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
idd werkt perfect - diepe opluchting !!! hartelijk dank aan mbravenboer (het was die self:: die het deed ;) Dat gaat me rustig een extra dagje sparen :)... _/-\o_

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Mooi, zal ik ff m'n rekeningnummer geven? :*) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
zeker :) trouwens er klopt toch iets kleins niet

self::node()[@type='string'] werkt perfect... niet mooi maar kan me niet schelen :)

nu lees is self::node() = . <- puntje...

maar

.[@type='string']

werkt niet (zou dit nu aan de implementatie liggen van Xalan? yep ben in Java bezig ;) of
is dat een 'quirk' van XPath 'zelve'... als ik tijd had zou ik er achter zoeken...

nog es many many many many thx (met die self::node() heb ik dus ook geen nodename meer nodig dus is de 'query' een echte XPath query geworden, wat ik wou)..

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
hobbit_be: self::node()[@type='string'] werkt perfect... niet mooi maar kan me niet schelen :)
Waarom gebruik je niet

code:
1
self::*[@type='string']

als je de element naam niet vast wilt leggen?
zou dit nu aan de implementatie liggen van Xalan? yep ben in Java bezig ;) of
is dat een 'quirk' van XPath 'zelve'... als ik tijd had zou ik er achter zoeken...
Ik heb geen idee: zo heel goed zit ik ook niet in XPath ;) . Je redenatie ziet er logisch uit, dus is XPath inconsequent of is het inderdaad een gebrek in Xalan.

[ Voor 7% gewijzigd door mbravenboer op 25-01-2003 21:07 ]

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
self::*[@type='string'] werkt ook :) en is weer wat korter ! nu heb ik nog geen enkel voorbeeld gevonden waarin dat een . met iets anders behalve / wordt gevonden.

misschiend doet ie well child::. aangezien je toch . mag gebruiken in een naam :) dan
ist logisch...
Pagina: 1