2016-09-23 10 views
1

私はNokogiriを使用して、APIから受け取ったXMLを検索しています。テキストメソッドにアクセスする前に、Nokogiriオブジェクトがnilかどうかをチェックします

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

子供の要素(例:繊維)が応答に欠落していることがあります。この場合、Nokogiriはnilオブジェクトを返し、私のコードはnilオブジェクトの 'text'メソッドにアクセスしようとしているため、適切な例外(nil:NilClassの未定義メソッド `text ')をスローします。

実際に 'テキスト'メソッドを呼び出す前に子要素(ファイバーなど)が存在するかどうかを確認するクリーンで迅速な方法は何ですか?それが存在しない場合、私はまた、いくつかの他の子要素のために(例えば、カロリー、炭水化物など)これをやって0に

答えて

4

)" してみてください= '繊維を'] '提供' それnilでなければテキストを呼び出します

デフォルト値が必要な場合は、これを行うことはできません。

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

完全に作業しました。それは、 'nil + x = x'なので、私は 'default'オプションを使う必要がないことが判明しました。 –

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

[名前()=を値を設定したいのですが

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

それは最初がnilの場合はnilを返し、]/* [名前()このような場合のために ""を使用でき

fiber = element.present? ? element.first.text : <handle other case here> 
関連する問題