REXML XPath bug?

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.

  • Andy

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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs