Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
REXML XPath bug?
Andy Watts
5/14/2008 8:01:00 PM
I'm having trouble with a particular XPATH in REXML and would greatly
appreciate any help.
Given this simple document..
<body>
<div class="summary">xxx</div>
<div>
<span>yyy</span>
</div>
</body>
The xpath "//div[@class='summary']/following-sibling::div/span" is
failing to return '<span>yyy</span>'.
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
=> "<div>\n<span>yyy</span>\n</div>"
>> puts doc.to_s
<body>
<div class='summary'>xxx</div>
<div>
<span>yyy</span>
</div>
</body>
The xpath works fine in firefox's xpath checker, so it seems like an
issue with rexml.
Any help greatly appreciated.
- Andy
--
Posted via
http://www.ruby-...
.
1 Answer
Casimir
5/17/2008 9:37:00 AM
0
On Wed, 14 May 2008 15:00:47 -0500, Andy Watts 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 <span>yyy</span>.
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"]
<div>
<span>yyy</span>
</div>
* hmm....
irb(main):049:0> puts root.elements["//div[@class='summary']/
following::div/span"]
<span>yyy</span>
** 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/saxo...
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 Pohjanraito
> Given this simple document..
> <body>
> <div class="summary">xxx</div>
> <div>
> <span>yyy</span>
> </div>
> </body>
>
> The xpath "//div[@class='summary']/following-sibling::div/span" is
> failing to return '<span>yyy</span>'.
>
>
> 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
> => "<div>\n<span>yyy</span>\n</div>"
>>> puts doc.to_s
> <body>
> <div class='summary'>xxx</div>
> <div>
> <span>yyy</span>
> </div>
> </body>
>
> The xpath works fine in firefox's xpath checker, so it seems like an
> issue with rexml.
> Any help greatly appreciated.
>
> - Andy
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
REXML XPath bug?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password