如何使用Nokogiri将一个节点的HTML内容添加到另一个节点

时间:2015-04-30 03:19:56

标签: ruby nokogiri

正如标题所说,我想知道如何将一个节点的内容添加到另一个节点,例如。假设有一个节点:

<li>
 <a>I'm a link</a>
 <p>I'm a <b>paragraph</b></p>
</li>

另一个节点我想添加上面的内容:

<p>
 <a>Link1</a>
 <a>Link2</a>
 <a>Link3</a>
 <a>Link4</a>
</p>

然后将后一个节点卸载到前者中,如下所示:

<li>
 <a>I'm a link</a>
 <p>I'm a <b>paragraph</b></p>
 <a>Link1</a>
 <a>Link2</a>
 <a>Link3</a>
 <a>Link4</a>
</li>

1 个答案:

答案 0 :(得分:2)

我根据您的问题创建了两个HTML DOM片段。 该行基本上将@doc.at_css("li") << @doc1.at_css("p").children两个片段组合在一起。

@doc.at("li")返回DOM Node li<<附加@ doc1 DOM Node``p的子项,这四个a元素。

require 'nokogiri'

@doc = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML
<li>
 <a>I'm a link</a>
 <p>I'm a <b>paragraph</b></p>
</li>
EOHTML

@doc1 = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML
<p>
 <a>Link1</a>
 <a>Link2</a>
 <a>Link3</a>
 <a>Link4</a>
</p>
EOHTML

@doc.at("li") << @doc1.at("p").children
print @doc

<li>
 <a>I'm a link</a>
 <p>I'm a <b>paragraph</b></p>

 <a>Link1</a>
 <a>Link2</a>
 <a>Link3</a>
 <a>Link4</a>
</li>