你怎么能操纵通过Nokogiri解析的html页面?

时间:2009-10-19 07:02:20

标签: ruby nokogiri

所以我使用nokogiri解析了一个html页面。

我想在每个链接出现时包装 标签

.wrap()似乎无效。

puts doc.xpath("//a").wrap("<b></b>");

返回普通的常规未更改的html。

1 个答案:

答案 0 :(得分:2)

这是wrap工作方式的缺陷。这是来源:

# File lib/nokogiri/xml/node_set.rb, line 212
  def wrap(html, &blk)
    each do |j|
      new_parent = Nokogiri.make(html, &blk)
      j.parent.add_child(new_parent)
      new_parent.add_child(j)
    end
    self
  end

正如您所看到的,不是将j替换为new_parent,而是将new_parent添加到j的兄弟姐妹的末尾。你可以这样做你想做的事情:

doc.search('//a').each do |j|
  new_parent = Nokogiri::XML::Node.new('b',doc)
  j.replace  new_parent
  new_parent << j
end