On Tue, Aug 28, 2012 at 1:04 PM, Mert <[email protected]> wrote:
> Hi all,
>
> I am trying to run some xpath queries on a XML file. But it seems
> nokogiri can not handle texts containing &amp; values.

That's not true.  The issue is with your understanding (or lack
thereof) of XML Entities.  See below.

> here is an example, second line prints nothing. if i change &amp; to
> something else in both xml and xpath expression, i get the values i
> expect.
>
> How can i query xpath expressions with XML excapes.
>
> file_xml = Nokogiri::XML File.open(file_configurable)
> print
> file_xml.xpath("//Match[text()='value1&amp;value2']/../Value").text.to_s

We would need to see your input but I guess it's something like this:

irb(main):001:0> xml = "<a>foo&amp;bar</a>"
=> "<a>foo&amp;bar</a>"
irb(main):002:0> dom = Nokogiri.XML(xml)
=> #<Nokogiri::XML::Document:0x..fc0107cf6 name="document"
children=[#<Nokogiri::XML::Element:0x..fc0107b34 name="a"
children=[#<Nokogiri::XML::Text:0x..fc010795e "foo&bar">]>]>
irb(main):003:0> dom.xpath '//a[text()="foo&bar"]'
=> [#<Nokogiri::XML::Element:0x..fc0107b34 name="a"
children=[#<Nokogiri::XML::Text:0x..fc010795e "foo&bar">]>]

You tried

irb(main):004:0> dom.xpath '//a[text()="foo&amp;bar"]'
=> []

That does not work because the "&amp;" only exists in the external
representation of the XML (the file).  The XML Entity is parsed and
the document contains the literal "&":

irb(main):005:0> dom.root.text.to_s
=> "foo&bar"
irb(main):006:0> dom.root.text
=> "foo&bar"

Kind regards

robert


-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

-- You received this message because you are subscribed to the Google Groups 
ruby-talk-google group. To post to this group, send email to 
[email protected]. To unsubscribe from this group, send email 
to [email protected]. For more options, visit this 
group at https://groups.google.com/d/forum/ruby-talk-google?hl=en

Reply via email to