Ruby libXML Xpath 在结果中找到 returns 结果

Ruby libXML Xpath find returns result in result

使用 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。 我故意将其显示为项目符号列表,并在水平线之后进行检查。 如您所见,最后一项前面没有项目符号。 但它从何而来? 我是不是遗漏了什么或者这是一个错误?

each 的 return 值是结果对象本身。在您的代码中,由于您在行 <%= @projects.each do |pr| %> 中使用了 =,因此您打印出每个项目作为列表项(在块中), 然后打印 return 来自 each.

的值

解决方法就是使用<% ... %>(即不用=):

<ul>
<% @projects.each do |pr| %>
    <li><%= pr.first.content %></li>
<% end %>
</ul>