I have the following XML:
-
Title 1
http://www.example.com/url-1
The trouble here is that the Xpath //title searches for titles from the root of the document, and so returns all title tags. Using the Xpath title searches within the context of the given node, like you want. Ditto on url.
@links = doc.xpath('//links/item').map do |i|
{'title' => i.xpath('title'), 'url' => i.xpath('url')}
end
Replace this:
@links = doc.xpath('//links/item').map do |i|
{'title' => i.xpath('//title'), 'url' => i.xpath('//url')}
with:
@links = doc.xpath('//links/item').map do |i|
{'title' => i.xpath('title'), 'url' => i.xpath('url')}
Explanation:
//title
and
//url
are absolute XPath expressions and they select all (respectively) title and all url elements in the XML document.
Contrast this with:
title
and
url
These are relative XPath expressions and select all (respectively) title and url children of the current node only.