【发布时间】:2021-05-04 09:11:21
【问题描述】:
我正在尝试使用基于 Nokogiri 的 gem ruby-readability 从文档中删除空的 <p> 标签。在控制台中使用.strip.empty? 可以正常工作,如下所示:
irb> p = Nokogiri::HTML("<p> </p>")
=> #<Nokogiri::HTML::Document...
irb> p.content
=> " "
irb> p.content.strip
=> ""
irb> p.content.strip.empty?
=> true
在ruby-readability gem 中运行相同的操作,将返回false。
在该方法中,我添加了一个额外的调用来测试我的测试 HTML 文档中的 <p> </p> 行:
if @options[:remove_empty_nodes]
node.css("p").each do |elem|
puts "IS IT EMPTY?"
puts element.content.strip.empty?
elem.remove if elem.content.strip.empty?
end
end
IS IT EMPTY?
false
为什么返回false?
更新:
根据下面的讨论,我在 HTML 文档中添加了一个新元素:<p></p>。如果我打电话给element.content.bytes.inspect 或element.content.strip.bytes.inspect 我会得到这个:
ELEMENT:
<p> </p>
[194, 160]
ELEMENT:
<p></p>
[]
在 IRB 中,.strip 似乎正在工作:
irb> p.content.bytes.inspect
=> "[32]"
irb> p.content.strip.bytes.inspect
=> "[]"
【问题讨论】:
-
您确定
node.css块内的element.content恰好是一个空格而不是其他空格吗? -
我在 HTML 文档中添加了它,就像我在 IRB 中添加它一样,如上所述。会是怎样的“别的东西”?你的意思是像
&nbsp;这样的东西吗?如果我将puts "'#{element.content.strip.empty?}'"放在node.css块中,它会返回''。 -
我在想
"\u00a0"之类的东西。element.content.bytes.inspect长什么样子? -
在 IRB 中返回
"[32]"。在循环内它返回[194, 160]。