2014-10-10 60 views
1

我发布了一个类似的问题,没有考虑到正文中的多行。我有一个HTML像这样,我想提取的“身体”(使用引入nokogiri)的:在标题标签下提取多行内容

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> 
    | 

我想提取下的每个标题标题的主体内容,并把它们放入一个数组,像这样:

[ 
    "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?) 

我得到这个数组来代替:

[ 
    "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" 
] 

有没有办法提取多行“正文”的内容来显示我想要的数组?

+1

您的问题与多行无关,它必须处理标题后面的多个DOM节点。 – sawa 2014-10-10 07:15:10

回答

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 2014-10-10 07:27:42