Nokogiriのdomに要素を追加する

特定の要素を抜き出すのではなく特定のノードに要素を追加する使い方

#!/usr/bin/ruby
# coding: utf-8
require 'nokogiri'

if $0==__FILE__ then
  doc=Nokogiri::HTML <<-__HTML__
<html>
  <head>
  </head>
  <body>
    <div>div0</div>
  </body>
</html>
  __HTML__

  body=doc.at('/html/body')

  div1=Nokogiri::XML::Node::new('div', doc)
  # htmlとして追加
  div1.inner_html='<p>div1</p>'
  body.add_child(div1)
  puts body
  puts

  div2=Nokogiri::XML::Node::new('div', doc)
  # テキストとして追加
  div2.content='<p>div2</p>'
  doc.at('/html/body/div').add_previous_sibling(div2)                             
  puts body
  puts

end

実行結果

# add_childは、node.childrenの末尾に追加
<body>
    <div>div0</div>
  <div><p>div1</p></div>
</body>

# 先頭に追加するには、node.children[0].add_previous_sibling node
# 的な方法が必要。node.chidrenが無い時と場合わけが必要か。
<body>
    <div>&lt;p&gt;div2&lt;/p&gt;</div>
<div>div0</div>
  <div><p>div1</p></div>
</body>