gpt4 book ai didi

ruby - 你如何使用 Nokogiri 去除 HTML 标签之间的间隙?

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

假设我有这种标记:

<li>    Some text </li>
<li> <strong> Some text </strong> hello</li>

我需要确保开场后没有空格<li>标记和任何封闭的文本内容之前。使用 Nokogiri 实现这一目标的最佳方法是什么?

期望的结果:

<li>Some text </li>
<li><strong>Some text </strong> hello</li>

最佳答案

删除整个文档中的所有前导/尾随空格:

doc.xpath('//text()').each do |node|
if node.content=~/\S/
node.content = node.content.strip
else
node.remove
end
end

但是,请注意这会变成 <p>Hello <b>World</b></p>进入<p>Hello<b>World</b></p> .您可能需要更精确地指定您想要的内容。

编辑:这是一个更好的解决方案,它从元素的第一个子元素的所有文本节点中删除前导空格,并从最后一个子元素的文本节点中删除所有尾随空格:

doc.xpath('//text()[1]').each{ |t|      t.content = t.content.lstrip }
doc.xpath('//text()[last()]').each{ |t| t.content = t.content.rstrip }

实际可见:

html = '<ul>
<li> First text </li>
<li> <strong> Some text </strong> </li>
<li> I am <b> embedded </b> and need <i>some </i> <em>spaces</em>. </li>
</ul>'

require 'nokogiri'
doc = Nokogiri.HTML(html)
doc.xpath('//text()[1]').each{ |t| t.content = t.content.lstrip }
doc.xpath('//text()[last()]').each{ |t| t.content = t.content.rstrip }
puts doc.root
#=> <html><body><ul>
#=> <li>First text</li><li><strong>Some text</strong></li>
#=> <li>I am <b>embedded</b> and need <i>some</i> <em>spaces</em>.</li></ul></body></html>

编辑 #2: 下面是如何将它从 <li> 前面的文本节点上剥离掉:

doc.xpath('//li/text()[1]').each{ |t| t.content = t.content.lstrip }

关于ruby - 你如何使用 Nokogiri 去除 HTML 标签之间的间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8965897/

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