什麼是有引入nokogiri選擇開始和停止元素之間的所有內容(包括開始 - /停止元)的最聰明的方法是什麼?引入nokogiri:元素A和B之間選擇內容
檢查下面的示例代碼來了解我在尋找:
require 'rubygems'
require 'nokogiri'
value = Nokogiri::HTML.parse(<<-HTML_END)
"<html>
<body>
<p id='para-1'>A</p>
<div class='block' id='X1'>
<p class="this">Foo</p>
<p id='para-2'>B</p>
</div>
<p id='para-3'>C</p>
<p class="that">Bar</p>
<p id='para-4'>D</p>
<p id='para-5'>E</p>
<div class='block' id='X2'>
<p id='para-6'>F</p>
</div>
<p id='para-7'>F</p>
<p id='para-8'>G</p>
</body>
</html>"
HTML_END
parent = value.css('body').first
# START element
@start_element = parent.at('p#para-3')
# STOP element
@end_element = parent.at('p#para-7')
結果(返回值)應該是這樣:
<p id='para-3'>C</p>
<p class="that">Bar</p>
<p id='para-4'>D</p>
<p id='para-5'>E</p>
<div class='block' id='X2'>
<p id='para-6'>F</p>
</div>
<p id='para-7'>F</p>
更新:這是我的目前的解決方案,但我認爲必須有一些更聰明:
@my_content = ""
@selected_node = true
def collect_content(_start)
if _start == @end_element
@my_content << _start.to_html
@selected_node = false
end
if @selected_node == true
@my_content << _start.to_html
collect_content(_start.next)
end
end
collect_content(@start_element)
puts @my_content
感謝您的解決方案,並感謝您的尤伯杯智能遞推的單行!雖然,我不明白什麼是「*」前collect_between的遞歸調用()代表。你能詳細說明一下嗎? – Javier 2009-05-06 08:21:50
我已在我的原單回答一個小小的解釋。谷歌周圍「圖示操作」獲取更多:-) – 2009-05-07 19:58:50