Nokogiri: node_set.rb:239: [BUG] 分段错误



我目前正在抓取一些RSS提要并将项目收集到节点集中。这很好用,但是Nokogiri在某些物品上崩溃了。起初我认为我的OSX开发环境出了问题,所以安装了Debian服务器并得到了完全相同的错误。还尝试将 Ruby 从 1.9.3 降级到 1.9.2。

有什么建议吗?

一些代码:

doc.xpath("//item").remove
nodeset = doc.xpath("//item")
..
api_doc.xpath("//item").each do |node|
  node = check_score(node)
  unless node.nil?
    nodeset << node
  end
end
def check_score(node)
  if node.xpath('website:attr[@name="imdbscore"]/@value').text.to_i > 6
    return node
  end
end
# sorting and finally add nodeset to doc.

崩溃日志在这里..

我认为删除所有//item节点然后尝试找到它们是一种不好的做法。就在那里,我可以看到麻烦正在酝酿。

这将从文档中删除所有<item>节点:

doc.xpath("//item").remove

这将尝试查找所有<item>节点,这将返回一个空的 NodeSet:

nodeset = doc.xpath("//item")

您没有显示api_doc来自哪里,但如果它是来自doc的节点,尤其是在您删除节点之前,它的状态是可疑的,因为您可能有一些对已删除<item>节点的悬而未决的引用。照原样,这会尝试遍历所有可能不存在的<item>节点,因此可能会返回空的 NodeSet,或者更糟的是,可能会损坏:

api_doc.xpath("//item").each do |node|
  node = check_score(node)
  unless node.nil?
    nodeset << node
  end
end

我会检查你的Nokogiri和LibXML2的修订版,并确保它们是最新的。如果没有,请更新它们。我还会重新考虑在查找之前删除所有<item>节点的逻辑。

如果您解释一下您要执行的操作,并分享一个 XML 的小示例,也许我们可以更好地帮助您。

相关内容

  • 没有找到相关文章

最新更新