用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表达式,仅选择当前节点的所有(分别) title
和url
子节点。
这里的麻烦是Xpath //title
从文档的根目录中搜索标题,因此返回所有title
标签。 使用Xpath title
在给定节点的上下文中搜索,就像您想要的那样。 在url
同上。
@links = doc.xpath('//links/item').map do |i| {'title' => i.xpath('title'), 'url' => i.xpath('url')} end