使用Ruby libXML解析XML文档我发现了一个奇怪的行为。 在搜索某些元素并遍历结果时,我将结果对象返回到结果本身。
这是一个示例XML
<?xml version="1.0" encoding="UTF-8"?>
<main>
<projects>
<project id="1">
<name>Project 1</name>
<van>Guus</van>
</project>
<project id="2">
<name>Project 2</name>
<van>Guus</van>
</project>
</projects>
</main>
解析代码(控制器):
@projects = @xmlDoc.find('//project[@id]/name')
显示它(视图):
<ul>
<%= @projects.each do |pr| %>
<li><%= pr.first.content %></li>
<% end %>
</ul>
<hr>
<%= @projects.inspect%>
结果:
- Project 1
- Project 2
#<LibXML::XML::XPath::Object:0x000008153182c0>
------------------------------------------------------------------------
#<LibXML::XML::XPath::Object:0x000008153182c0>
如您所见,该列表包含XPath对象self。 我有意将它显示为子弹列表并在水平线后进行检查。 如您所见,最后一个项目前面没有子弹。 但是它来自哪里? 我错过了什么或者这是一个错误吗?
答案 0 :(得分:0)
each
的返回值是结果对象本身。在您的代码中,由于您在行=
中使用<%= @projects.each do |pr| %>
,因此您将每个项目打印为列表项(在块中),,然后从{{打印返回值1}}
解决方案就是使用each
(即没有<% ... %>
):
=