2014-10-10 2 views
1

본문에 여러 줄을 고려하지 않은 비슷한 질문을 게시했습니다. 나는 각각의 헤더 제목 아래 본문 내용을 추출과 같이 배열로를 배치 할헤더 태그 아래의 다중 줄 내용 추출

html = %q| 
    <div class="content"> 
     <h1>Title 1</h1> 
     Lorem ipsum 1 

     <h2>Title 2</h2> 
     Lorem ipsum 2 

     <h3>Title 3</h3> 
     <p>paragraph content 1</p> 
     <b>Lorem ipsum 3</b> 
     <p>paragraph content 2</p> 

     <h1>Title 4</h1> 
     Lorem ipsum 4 

     <h2>Title 5</h2> 
     Lorem ipsum 5 
    </div> 
    | 

을 : 나는 (노코 기리를 사용)의 "몸"을 추출 할 것을 같은 html로이

그러나
[ 
    "Lorem ipsum 1", 
    "Lorem ipsum 2", 
    "<p>paragraph content 1</p><b>Lorem ipsum 3</b><p>paragraph content 2</p>", 
    "Lorem ipsum 4", 
    "Lorem ipsum 5" 
] 

, 나는 할 때 :

[ 
    "Lorem ipsum 1", 
    "Lorem ipsum 2", 
    "<p>paragraph content 1</p>", 
    "<b>Lorem ipsum 3</b>", 
    "<p>paragraph content 2</p>", 
    "Lorem ipsum 4", 
    "Lorem ipsum 5" 
] 
: 내가 대신 배열을 얻을

Nokogiri::HTML(html). 
    css("div"). 
    children. 
    reject{|e| e.name =~ /\Ah\d\z/}. 
    map{|e| e.to_html.strip}.reject(&:empty?) 

여러 개의 "body"내용을 추출하여 원하는 배열을 표시하는 방법이 있습니까?

+1

문제는 여러 행과 관련이 없으며 헤더 다음에 오는 여러 DOM 노드와 관련이 있습니다. – sawa

답변

1
Nokogiri::HTML(html) 
.css("div").children 
.slice_before{|e| e.name =~ /\Ah\d\z/} 
.map{|a| a.drop(1).map{|e| e.to_html.strip}.join}.reject(&:empty?) 
+0

아, 이제 알겠습니다. 당신은 위대했습니다. 나는 너의 도움에 매우 감사한다! 언제나처럼 고맙습니다 !! – sjsc