I’m having trouble with a particular XPATH in REXML and would greatly
appreciate any help.
Given this simple document…
xxx
yyy
The xpath “//div[@class=‘summary’]/following-sibling::div/span” is
failing to return ‘yyy’.
Here’s a console dump that also shows a simplier xpath working.
REXML::XPath.match(doc, “//div[@class=‘summary’]/following-sibling::div/span”).to_s
=> “”
REXML::XPath.match(doc, “//div[@class=‘summary’]/following-sibling::div”).to_s
=> “
\nyyy\n
”
puts doc.to_s
xxx
yyy
The xpath works fine in firefox’s xpath checker, so it seems like an
issue with rexml.
Any help greatly appreciated.
On Wed, 14 May 2008 15:00:47 -0500, Andy W. wrote:
I’m having trouble with a particular XPATH in REXML and would greatly
appreciate any help.
(rest of it quoted below)
Ok, I tested this with JEdits XPATH tool and indeed, the xpath “//div
[@class=‘summary’]/following-sibling::div” returns the span-element with
string-value yyy, xml fragment yyy.
Is it a bug? I must admit I would need to read more references etc
before
being able to say definately - or is it just different interpretation of
the following-sibling -axis. Dont have the time to see the rfc atm.
But I played around a bit:
irb(main):046:0> puts root.elements[“//div[@class=‘summary’]/following-
sibling::div/span”]
nil
- So, it doesnt work like that.
irb(main):047:0> puts root.elements[“//div[@class=‘summary’]/following-
sibling::div”]
yyy
* hmm....
irb(main):049:0> puts root.elements[“//div[@class=‘summary’]/
following::div/span”]
yyy
** Would this work in your case?
ALSO - you could include the rexml namespace by adding the line
include REXML
after the rexml requires. This way you wont have to use the long ::-
syntax, but can refer to document or elements directly, and use xpaths
simply as above inside [“”].
I also played around with this http://www.zvon.org:9001/saxon/cgi-bin/
XLab/XML/xpatut_15.html and following seems to accomplish what you need.
Finally, just plain-jane /div/span would select the span but maybe there
can be many and you only want the one after the summary div.
Out of time, gtg
Casimir P.