REXML and XPath


#1

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?


#2

On 1/26/06, Mark V. removed_email_address@domain.invalid 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)’)


#3

On Jan 26, 2006, at 8:18 PM, Mark V. 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.


#4

On 1/27/06, Adam K. removed_email_address@domain.invalid 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.