本文介绍了使用 Nokogiri 解析简单的 XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下 XML:
<links>
<item>
<title>Title 1</title>
<url>http://www.example.com/url-1</url>
</item>
<item>
<title>Title 2</title>
<url>http://www.example.com/url-2</url>
</item>
<item>
<title>Title 3</title>
<url>http://www.example.com/url-3</url>
</item>
</links>
而且,我想将其转换为 HTML 列表:
And, I would like to convert it to a HTML list:
<ul>
<li><a href="http://www.example.com/url-1">Title 1</a></li>
<li><a href="http://www.example.com/url-2">Title 2</a></li>
<li><a href="http://www.example.com/url-3">Title 3</a></li>
</ul>
目前我有这个:
控制器:
require 'nokogiri'
doc = Nokogiri::XML(...)
@links = doc.xpath('//links/item').map do |i|
{'title' => i.xpath('//title'), 'url' => i.xpath('//url')}
end
模板:
<ul>
<% @links.each do |l| %>
<li><a href="<%= l['url'] %>"><%= l['title'] %></a></li>
<% end %>
</ul>
结果 HTML:
<ul>
<li><a href="http://www.example.com/url-1http://www.example.com/url-2http://www.example.com/url-3">Title 1Title 2Title 3</a></li>
<li><a href="http://www.example.com/url-1http://www.example.com/url-2http://www.example.com/url-3">Title 1Title 2Title 3</a></li>
<li><a href="http://www.example.com/url-1http://www.example.com/url-2http://www.example.com/url-3">Title 1Title 2Title 3</a></li>
</ul>
我做错了什么?有没有更好的方法来做到这一点?
What am I doing wrong? Is there a more optimal way of doing this?
推荐答案
替换这个:
@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
元素.
are absolute XPath expressions and they select all (respectively) title
and all url
elements in the XML document.
对比:
title
和
url
这些是 相对 XPath 表达式并选择所有(分别)title
和 url
current 节点的子节点仅.
These are relative XPath expressions and select all (respectively) title
and url
children of the current node only.
这篇关于使用 Nokogiri 解析简单的 XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!