2016-09-23 43 views
1

我正在使用Nokogiri來搜索從API接收到的XML。在訪問文本方法之前檢查Nokogiri對象是否爲零

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

雖然有時候,響應中缺少子元素(例如光纖)。在這種情況下,Nokogiri返回一個nil對象,我的代碼會拋出相應的異常(nil:NilClass中未定義的方法'text'),因爲我試圖訪問nil對象的'text'方法。

在實際嘗試調用其'文本'方法之前,檢查子元素(例如光纖)是否存在的乾淨而快速的方法是什麼?如果它不存在,我想將值設置爲0,我也這樣做了其他幾個子元素(如卡路里,碳水化合物等)

回答

4

您可以使用 」試一試「 的情形外

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

它返回nil,如果第一個是零,它如果不是零,請打上文字

如果你需要一個默認值,如果它是零你可以做

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

完美工作。事實證明,我不需要使用「默認」選項,因爲'nil + x = x',這就是我需要的結果。 –

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

[名稱()= '服務']/* [名稱()= '纖維']「)

fiber = element.present? ? element.first.text : <handle other case here> 
相關問題