在访问文本方法之前检查 Nokogiri 对象是否为 nil

Checking if Nokogiri object is nil before accessing text method

我正在使用 Nokogiri 搜索从 API 收到的 XML。

fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
 [name()='serving']/*[name()='fiber']").first.text

但有时,响应中会缺少子元素(例如 fiber)。在这种情况下,Nokogiri returns 一个 nil 对象,我的代码抛出相应的异常(nil:NilClass 的未定义方法 `text'),因为我试图访问 nil 的 'text' 方法对象。

在实际尝试调用 'text' 方法之前检查子元素(例如 fiber)是否存在的干净快速的方法是什么?如果它不存在,我想将该值设置为 0。我也在为其他几个子元素(例如卡路里、碳水化合物等)这样做

element = doc.xpath("/*[name()='food']/*[name()='servings']/*

[name()='serving']/*[name()='fiber']")

fiber = element.present? ? element.first.text : <handle other case here>

对于这些情况,您可以使用 "try"

fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
     [name()='serving']/*[name()='fiber']").first.try(:text)

它returns如果first为nil则为nil,如果不是nil则调用text

如果你需要一个默认值以防它为 nil,你可以这样做

fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
     [name()='serving']/*[name()='fiber']").first.try(:text) or 'default'