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>
使用 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>