Parameterizing REXML::XPath expressions

Hi there,

I'm struggling a bit with what I think should be straightforward.

I basically want to pull information out of an XML document.

The working example I have is as follows...

version = REXML::XPath.match(@doc, '//[@pn="123-4567-89"]/
@version').to_s

However, I don't want to hardcode the value of the part number (pn).
I want to ref it via a variable.

e.g. if I have a variable 'partnum' which is set to "123-4567-89"

then I was expecting the expression to be something like...

version = REXML::XPath.match(@doc, '//[@pn=partnum]/
@version').to_s # no match

I've tried some variations but with same no match result.
But basically I'm just guessing which is bad.

All of the REXML tutorials always hardcode their examples.
Any help would be appreciated.

I think currently
version = REXML::XPath.match(@doc, '//[@pn=partnum]/
@version').to_s

Is looking for an element with pn="partnum".

What you need is the value of partnum:

version = REXML::XPath.match(@doc, "//[@pn='#{partnum}']/
@version").to_s

Note the quotes around the string and those around the #{}.

This is called string interpolation.

I'm not 100% sure it will work, but it should do.

Hope that helps.

Regards,
Emil Ivanov

···

On 24/06/07, Sy <brianthomson42@gmail.com> wrote:

Hi there,

I'm struggling a bit with what I think should be straightforward.

I basically want to pull information out of an XML document.

The working example I have is as follows...

version = REXML::XPath.match(@doc, '//[@pn="123-4567-89"]/
@version').to_s

However, I don't want to hardcode the value of the part number (pn).
I want to ref it via a variable.

e.g. if I have a variable 'partnum' which is set to "123-4567-89"

then I was expecting the expression to be something like...

version = REXML::XPath.match(@doc, '//[@pn=partnum]/
@version').to_s # no match

I've tried some variations but with same no match result.
But basically I'm just guessing which is bad.

All of the REXML tutorials always hardcode their examples.
Any help would be appreciated.

--
My place to share my ideas:
http://vladev.blogspot.com