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



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

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

但是,有时响应中缺少子元素(例如光纤(。在这种情况下,Nokogiri返回一个nil对象,我的代码抛出适当的异常(nil:NilClass的未定义方法"text"(,因为我正试图访问nil对象的"text"方法。

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

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

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

如果第一个为nil,它返回nil;如果不是nil,则调用文本

如果你需要一个默认值,以防它为零,你可以进行

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

[名称((='serving']/*[名称(((='光纤']"(

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

相关内容

  • 没有找到相关文章

最新更新