【问题标题】:Ruby parsing XML; nil exceptionRuby 解析 XML;无异常
【发布时间】:2014-05-16 22:46:41
【问题描述】:

我有一个 Ruby 程序,它从网站解析 XML,当其中一个元素为 nil 时,它时常崩溃。

我已经实现了以下代码来处理它,但它似乎不起作用;

begin
    data[6]= element.elements["company_info"].elements["org_number"].text unless element.elements["company_info"].elements["org_number"].nil?

rescue
    data[6] = 'no_info'
end

异常消息显示无法将 nil 转换为字符串。谁能看出这是什么问题?

有问题的元素,当nil 时,只是一个<org_number/>

【问题讨论】:

  • 您能告诉我们您如何解析 xml 以及如何定义方法 elements 吗?
  • @BroiSatse 我不确定您想看到什么,但基本上我正在循环浏览这样的 XML 文档: xmldoc.elements.each("*//advert") do |element|
  • 我希望现在,这个 xmldoc 对象是如何创建的。您是否使用过一些 gem 来解析 xml?
  • 我正在使用 REXML,需要 'rexml/document' 包括 REXML。和机械化。 agent=Mechanize.new page = agent.get(url) xmlBlob=page.body xmlBlob.force_encoding("UTF-8") xmldoc = Document.new(xmlBlob)

标签: ruby xml string exception null


【解决方案1】:

将你的除非声明更改为:

if element.elements["company_info"] && element.elements["company_info"].elements["org_number"] && element.elements["company_info"].elements["org_number"].text

还可以查看andand gem。有了它,你可以简单地写:

data[6] = element.elements["company_info"].andand.elements["org_number"].andand.text || 'no_info'

一般来说,使用 nokogiri gem 进行 xml 解析,而不是编写自己的解析器。

【讨论】:

  • 感谢您的建议,下次我一定会尝试 nokogiri。您的答案似乎与之前的答案一样有效,但并没有解决问题。在指出错误的确切来源方面,我还有一些工作要做。
【解决方案2】:

您可以将unless 更新为:

unless element.elements["company_info"].elements["org_number"].text.nil?

你需要检查.text是否为nil。

【讨论】:

  • 感谢您的提醒。它没有解决问题,但可能缩小了一些范围。
  • 嗯..这很奇怪。如果您可以分享您的解析器是如何定义的,那么它将对您的问题有所了解。此外,您可以考虑像 BroiSatse 建议的那样去 Nokogiri。这是最好的选择之一。
  • 在终于有时间深入分析之后,这里的问题是,如果 text 为 nil,那么我会收到错误消息,大意是没有 nil 的方法元素。
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
相关资源
最近更新 更多