我使用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>