Nit*_*ant 2 ruby ruby-on-rails nokogiri
我正在使用Nokogiri搜索我从API收到的XML.
fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
[name()='serving']/*[name()='fiber']").first.text
Run Code Online (Sandbox Code Playgroud)
但有时候,响应中缺少子元素(例如光纤).在这种情况下,Nokogiri返回一个nil对象,我的代码抛出相应的异常(未定义的方法`text'为nil:NilClass)因为我试图访问nil对象的'text'方法.
在实际尝试调用"text"方法之前,检查子元素(例如光纤)是否存在的干净而快速的方法是什么?如果它不存在,我想将值设置为0.我也在为其他几个子元素(例如卡路里,碳水化合物等)做这个.
您可以对这些案例使用"尝试"
fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
[name()='serving']/*[name()='fiber']").first.try(:text)
Run Code Online (Sandbox Code Playgroud)
如果first为nil则返回nil,如果不是nil则返回文本
如果你需要一个默认值,如果它是零你可以做
fiber = doc.xpath("/*[name()='food']/*[name()='servings']/*
[name()='serving']/*[name()='fiber']").first.try(:text) or 'default'
Run Code Online (Sandbox Code Playgroud)