-1
使用ruby/nokogiri我想包裝一些元素,從一個元素開始,到下一個元素之前結束。因此,可以說,我有:包裝一系列兄弟元素
<div class="foo"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="foo"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="foo"></div>
<div class="foo"></div>
<div class="bar"></div>
<div class="bar"></div>
我想包裝所有的Foo及其鄰近的酒吧(如果有的話),在接下來的FOO(最後一個obvs沒有其他富之前關閉一類巴茲),如下所示:
<div class="baz">
<div class="foo"></div>
<div class="bar"></div>
<div class="bar"></div>
</div>
<div class="baz">
<div class="foo"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
</div>
<div class="baz">
<div class="foo"></div>
</div>
<div class="baz">
<div class="foo"></div>
<div class="bar"></div>
<div class="bar"></div>
</div>
謝謝。
編輯:我發現這一點,問過類似的問題,但我努力適應它XPath axis, get all following nodes until
編輯2:這將foo的後返回酒吧,但不是富:
body.xpath("(//div[@class='foo'])[1]/following-sibling::div[@class='bar']
[1 = count(preceding-sibling::div[@class='foo'][1] | (//div[@class='foo'])[1])]")
需要弄清楚如何包含foo!
編輯3:韋爾普這將增加foo的:
body.xpath("//div[@class='foo'][1]","//div[@class='foo']
[1]/following-sibling::div[@class='bar']
[1 = count(preceding-sibling::div[@class='foo'][1] | (//div[@class='foo'])[1])]")
但更大的問題是我不知道如何遍歷這個?它只是返回第一組foo +酒吧。
編輯4:通過FOO杆塊迭代:
var = 1
loop do
chunk = body.xpath("//div[@class='foo'][#{var}]","//div[@class='foo']
[#{var}]/following-sibling::div[@class='bar']
[1 = count(preceding-sibling::div[@class='foo'][#{var}] |
(//div[@class='foo'])[1])]")
puts chunk
var += 1
break if chunk.length == 0
end
不知道如何來包裝他們的div現在。