Nokogiri가 시작 요소와 중지 요소 (시작/중지 요소 포함) 사이의 모든 콘텐츠를 선택하는 가장 효율적인 방법은 무엇입니까?Nokogiri : 요소 A와 B 사이의 콘텐츠 선택
<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>
업데이트 :이과 같아야합니다
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')
결과 (반환 값) : 아래
확인 예제 코드는 내가 무엇을 찾고 이해하는이 내입니다 현재의 솔루션이지만, 나는 더 똑똑한 것이 있어야한다고 생각한다.
@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
원본 답안에 약간의 설명을 추가했습니다. 구글은 "splat operator"를 더 많이 :-) –
고마워! 호기심에서 벗어나 : "스 플랫 (splat) 연산자"가 어디에 문서화되어 있는지 알고 있습니까? http://www.ruby-doc.org/core/ – Javier