在ERB中使用Nokogiri遍历XML时末尾出现'0'字符问题
解决ERB中Nokogiri遍历XML末尾出现'0'的问题
这个问题我之前也踩过坑!大概率是你在ERB里误用了<%=来包裹each循环,而不是<%——这是Rails ERB开发中非常常见的小失误。
为什么会出现这个'0'?
在Ruby里,each方法执行完后会返回它遍历的原集合。当你用<%=包裹循环时,ERB会把这个返回值转换成字符串并输出。如果你的XPath查询没匹配到任何节点(或者<fields>下没有field元素),Nokogiri的空节点集被转成字符串时就会输出0;就算有匹配节点,节点集的默认字符串表示也可能出现意外内容,你这次刚好碰到了0。
怎么修复?
把包裹each循环的<%=改成<%就搞定了!举个例子:
错误写法(会输出0):
<%= @template.xpath('//form-template/fields/field').each do |field| %> <div class="form-field"> <label><%= field.attr('label') %></label> <!-- 字段渲染逻辑 --> </div> <% end %>
正确写法(不会输出额外内容):
<% @template.xpath('//form-template/fields/field').each do |field| %> <div class="form-field"> <label><%= field.attr('label') %></label> <!-- 字段渲染逻辑 --> </div> <% end %>
其他排查方向
如果改完还是有问题,可以检查这几点:
- 有没有在循环内部不小心用
<%=输出了某个值为0的变量(比如field.attr('some-count-attr')返回了0) - 确认你的XPath查询是否正确,有没有误匹配到包含
0的文本节点 - 试试把
each换成each_with_index,排查是不是索引输出的问题(这种情况很少见)
修改后测试一下,那个讨厌的0应该就消失啦!
内容的提问来源于stack exchange,提问作者joesmoke
相关产品推荐
相关产品推荐

