Ruby libXML Xpath find返回结果中的结果

时间:2015-10-01 09:06:07

标签: ruby xpath erb libxml2

使用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。 我有意将它显示为子弹列表并在水平线后进行检查。 如您所见,最后一个项目前面没有子弹。 但是它来自哪里? 我错过了什么或者这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

each的返回值是结果对象本身。在您的代码中,由于您在行=中使用<%= @projects.each do |pr| %>,因此您将每个项目打印为列表项(在块中),,然后从{{打印返回值1}}

解决方案就是使用each(即没有<% ... %>):

=