1

我正在尝试构建一个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>

不幸的是,我不知道如何选择未标记的元素,因为它不是节点。我确定我在这里遗漏了一些东西。有人可以在正确的方向上轻推我吗?

4

1 回答 1

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.

于 2010-07-02T17:51:32.903 回答