2010-03-19 1 views
1

이 출력을 생성하려면 아래 코드를 어떻게 얻을 수 있습니까?Nokogiri가 존재하지 않는 HTML 요소를 무시하는 방법

1-
2 - B 난이 오류 "정의되지 않은 메서드`텍스트 얻고있다

: TD 클래스의 무기 호에 대한 NilClass (NoMethodError)를"내가 표 1은 요소가없는 생각하기 때문에 '를 = 그것에 r2 '.

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML.parse(<<-eohtml) 
<table class="t1"> 
    <tbody> 
     <tr> 
      <td class="r1">1</td> 
     </tr> 
</tbody> 
</table> 
<table class="t2"> 
    <tbody> 
     <tr> 
      <td class="r1">2</td> 
      <td class="r2">B</td> 
     </tr> 
    </tbody>    
</table> 
eohtml 

doc.css('tbody > tr').each do |n| 
    r1 = n.at_css(".r1").text 
    r2 = n.at_css(".r2").text 
    puts "#{r1} - #{r2}" 
end 

답변

0

요소가 있는지 확인할 때까지 text() 메소드를 호출하지 마십시오. 전화 r1 = n.at_css(".r1").text을 두 줄로 분리하거나 || (ruby null coalescing 관용구)를 사용하여 at_css() 메소드가 nil을 리턴 할 때 r1을 기본값으로 설정합니다.

+0

제안에 감사드립니다,이 게임에서 새로운 :) – user296507

1

후 다음 작업을 수행 할 수있는 두 개의 테이블이있는 경우 :

t1_r1 = doc.xpath('//table[@class="t1"]//td[@class="r1"]').text 
t1_r2 = doc.xpath('//table[@class="t1"]//td[@class="r2"]').text 
t2_r1 = doc.xpath('//table[@class="t2"]//td[@class="r1"]').text 
t2_r2 = doc.xpath('//table[@class="t2"]//td[@class="r2"]').text 

하자 검사 결과가.

>> "#{t1_r1} - #{t1_r2}" 
=> "1 - " 
>> "#{t2_r1} - #{t2_r2}" 
=> "2 - B"