Forum: Ruby REXML and XPath

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
52a177e9dbd3e614825aabc4e45f8cd6?d=identicon&s=25 Mark Volkmann (Guest)
on 2006-01-27 03:07
(Received via mailing list)
The documentation for REXML says is has full XPath 1.0 support.
However, I can't see a way to get the XPath class to return values
other than nodes. For example, if I have an XML document that contains
"book" elements, I should be able to do something like this.

count = XPath.evaluate(doc, count('//book'))

There is no "evaluate" method and the "first" and "match" methods don't
do this.

Is this supported?
52a177e9dbd3e614825aabc4e45f8cd6?d=identicon&s=25 Mark Volkmann (Guest)
on 2006-01-27 03:19
(Received via mailing list)
On 1/26/06, Mark Volkmann <r.mark.volkmann@gmail.com> wrote:
> The documentation for REXML says is has full XPath 1.0 support.
> However, I can't see a way to get the XPath class to return values
> other than nodes. For example, if I have an XML document that contains
> "book" elements, I should be able to do something like this.
>
> count = XPath.evaluate(doc, count('//book'))

Minor syntax correction here,

count = XPath.evaluate(doc, 'count(//book)')
Cd2382441bbe2ec68e3bf36aea0ca2ea?d=identicon&s=25 Adam Keys (Guest)
on 2006-01-27 22:57
(Received via mailing list)
On Jan 26, 2006, at 8:18 PM, Mark Volkmann wrote:
>
> count = XPath.evaluate(doc, 'count(//book)')
>

As a work-around, you could try this:

count = XPath.match(doc, '//book').length

REXML may just support XPath's selection syntax and not the pseudo-
function-things like you're trying to use above.
52a177e9dbd3e614825aabc4e45f8cd6?d=identicon&s=25 Mark Volkmann (Guest)
on 2006-01-28 14:53
(Received via mailing list)
On 1/27/06, Adam Keys <adam@therealadam.com> wrote:
> > Minor syntax correction here,
> >
> > count = XPath.evaluate(doc, 'count(//book)')
> >
>
> As a work-around, you could try this:
>
> count = XPath.match(doc, '//book').length
>
> REXML may just support XPath's selection syntax and not the pseudo-
> function-things like you're trying to use above.

I found out that it does support what I wanted which is XPath
expressions that result in a number, string or boolean. You need to
use the XPath.first method for those.
This topic is locked and can not be replied to.