用Nokogiri解析简单的XML

我有以下XML:

  Title 1 http://www.example.com/url-1   Title 2 http://www.example.com/url-2   Title 3 http://www.example.com/url-3   

而且,我想将其转换为HTML列表:

  

目前我有这个:

控制器:

 require 'nokogiri' doc = Nokogiri::XML(...) @links = doc.xpath('//links/item').map do |i| {'title' => i.xpath('//title'), 'url' => i.xpath('//url')} end 

模板:

 
  • <a href="https://stackoverflow.com/questions/3938810/parsing-simple-xml-with-nokogiri/">

结果HTML:

  

我究竟做错了什么? 有更好的方法吗?

替换这个

 @links = doc.xpath('//links/item').map do |i| {'title' => i.xpath('//title'), 'url' => i.xpath('//url')} 

 @links = doc.xpath('//links/item').map do |i| {'title' => i.xpath('title'), 'url' => i.xpath('url')} 

说明

 //title 

 //url 

绝对的 XPath表达式,它们选择XML文档中的所有(分别) title和所有url元素。

与此对比

 title 

 url 

这些是相对 XPath表达式,仅选择当前节点的所有(分别) titleurl子节点。

这里的麻烦是Xpath //title从文档的根目录中搜索标题,因此返回所有title标签。 使用Xpath title在给定节点的上下文中搜索,就像您想要的那样。 在url同上。

 @links = doc.xpath('//links/item').map do |i| {'title' => i.xpath('title'), 'url' => i.xpath('url')} end