我正在使用Nokogiri搜索我从API收到的XML。
fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
[name()='serving']/*[name()='fiber']").first.text
有时候,响应中缺少子元素(例如光纤)。在这种情况下,Nokogiri返回一个nil对象,我的代码抛出相应的异常(未定义的方法`text' for nil:NilClass)因为我试图访问'文本'零物体的方法。
在实际尝试调用“文本”之前,检查子元素(例如光纤)是否存在的干净且快速的方法是什么?方法呢?如果它不存在,我想将值设置为0.我也为其他几个子元素(例如卡路里,碳水化合物等)做这个。
答案 0 :(得分:5)
您可以使用"尝试"对于那些案件
fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
[name()='serving']/*[name()='fiber']").first.try(:text)
如果first为nil则返回nil,如果它不是nil则返回
如果您需要默认值,如果它没有,您可以
fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
[name()='serving']/*[name()='fiber']").first.try(:text) or 'default'
答案 1 :(得分:0)
element = doc.xpath("/*[name()='food']/*[name()='servings']/*
[名称()= '服务'] / * [名称()= '纤维']“)
fiber = element.present? ? element.first.text : <handle other case here>