我正在尝试构建一个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>
不幸的是,我无法弄清楚如何选择未标记的元素,因为它不是一个节点。我确定我在这里遗漏了一些东西。有人可以给我一个正确方向的推动吗?
答案 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
。