gpt4 book ai didi

ruby - 如何使用 Nokogiri 删除除某些标签之外的所有标签

转载 作者:数据小太阳 更新时间:2023-10-29 08:25:05 25 4
gpt4 key购买 nike

如何使用 Nokogiri 删除特定节点下的所有标签,但某些元素除外?例如,使用此设置:

src = <<EOS
<html>
<body>
<p>
Hello <i>world</i>!
This is <em>another</em> line.
<p><h3>And a paragraph <em>with</em> a heading.</h3></p>
<b>Third line.</b>
</p>
</body>
</html>
EOS

doc = Nokogiri::HTML(src)
para = doc.at('//p')

如何删除段落中除 元素之外的所有元素(同时保留其内容)?所以结果是:

<html>
<body>
<p>
Hello <i>world</i>!
This is another line.
And a paragraph with a heading.
<b>Third line.</b>
</p>
</body>
</html>

最佳答案

只是为了完善示例,下面是一个使用没有 XSLT 的 Nokogiri 的示例:

require 'nokogiri'

src = <<EOS
<html>
<body>
<p>
Hello <i>world</i>!
This is <em>another</em> line.
<p><h3>And a paragraph <em>with</em> a heading.</h3></p>
<b>Third line.</b>
</p>
</body>
</html>
EOS

doc = Nokogiri::HTML(src)

if (doc.errors.any?)
puts "doc.errors:"
doc.errors.each do |e|
puts "#{ e.line }: #{ e.to_s }"
end
puts
end

doc.search('//p/*').each do |n|
n.replace(n.content) unless (%w[i b].include?(n.name))
end

puts doc.to_html
# >> doc.errors:
# >> 6: Unexpected end tag : p
# >> 8: Unexpected end tag : p
# >>
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html><body>
# >> <p>
# >> Hello <i>world</i>!
# >> This is another line.
# >> </p>
# >> <p></p>
# >> <h3>And a paragraph <em>with</em> a heading.</h3>
# >> <b>Third line.</b>
# >>
# >> </body></html>

请注意,Nokogiri 对标记不满意并进行了一些修复。而且,剥离标签的实际代码只有三行,本来可以写在一行上。

关于ruby - 如何使用 Nokogiri 删除除某些标签之外的所有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4885300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com