我想将文档拆分为“章节”。章节从h2开始,包括所有兄弟姐妹,但不包括下一个h2标签。
即。鉴于此
<div id="content">
<h2>First</h2>
<p>one</p>
<h2>Second</h2>
<p>two</p>
<h2>Third</h2>
</div>
我想要这个
<div id="dad">
<div class="chapter">
<h2>First</h2>
<p>one</p>
</div>
<div class="chapter">
<h2>Second</h2>
<p>two</p>
</div>
<div class="chapter">
<h2>Third</h2>
</div>
</div>
虽然我已经使用Nokogiri和xml进行了一些基本的操作,但我正在敲打我的标题,想知道如何首先将节点分组为章节块,然后用章节div将它们包装到位。
有人可以帮忙吗?
答案 0 :(得分:0)
您应该按标题对节点进行分组(包括相关的子节点),然后将它们转换为输出格式。
以下是对节点进行分组的算法的概念:
array = [
:header,
:text,
:text,
:header,
:text,
:header,
:text,
:text,
]
groupped_array = array.reduce([]) do |res, item|
res.tap do
res << [] if item == :header
res.last << item
end
end
p groupped_array
结果:
➜ ruby group_nodes.rb
[[:header, :text, :text], [:header, :text], [:header, :text, :text]]
我认为你可以在这里添加nokogiri
而不会出现大问题,并将结果转换为输出格式。