如何使用Ruby的Sanitize / Nokogiri访问未标记的元素?

时间:2010-07-02 17:22:23

标签: ruby nokogiri sanitize

我正在尝试构建一个Sanitize转换器,它接受可能格式错误的HTML输入,其中包含任何标记之外的元素,例如在此示例中:

out of a tag<p>in a tag</p>out again!

我想让变换器包裹<p>标签中的任何未标记元素,以便上述转换为:

<p>out of a tag</p><p>in a tag</p><p>out again!</p>

不幸的是,我无法弄清楚如何选择未标记的元素,因为它不是一个节点。我确定我在这里遗漏了一些东西。有人可以给我一个正确方向的推动吗?

1 个答案:

答案 0 :(得分:1)

require 'nokogiri'

html = 'out of a tag<p>in a tag</p>out again!'

Nokogiri::HTML(html).at_css('body').children.
  map {|x| '<p>' + x.text + '</p>' }.join('')
#=> "<p>out of a tag</p><p>in a tag</p><p>out again!</p>"

文本存储在文本节点中。由于CSS无法选择文本节点,因此您必须使用其他方法来获取Nokogiri::XML::Node#children