Я отправил аналогичный вопрос, который не учитывал несколько строк в теле. У меня есть 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"
]
Есть ли способ извлечь содержимое «тела» нескольких строк, чтобы отобразить мой желаемый массив?
Ваша проблема не имеет ничего общего с несколькими строками, она связана с несколькими узлами DOM после заголовка. – sawa