Nokogiri 丢失了名为"multi"的属性值



代码:

require 'nokogiri'
doc = Nokogiri::HTML("<!DOCTYPE html><html><input multiple='false' id='test' some='2'/><div multiple='false'></div></html>")
puts doc.errors
doc.css("input").each do |el|
    puts el.attributes['multiple']
end
puts doc.to_html

输出如下:

false
<!DOCTYPE html>
<html><body>
<input multiple id="test" some="2"><div multiple></div>
</body></html>
[Finished in 2.0s]

两个='false'在哪里??

编辑

另外,有没有办法降低默认更正??(使用to_xhtml可以保留='false'但是和CDATA到script标签)

在我的选项中,to_xhtml似乎工作更严格,为什么to_xhtml保留多个='false'代替??

EDIT2

这是我的临时解决方案:gsub(/multiple=/, 'blahhhhh')在解析之前,gsub(/blahhhhh/, 'multiple=')在解析后返回

to_html替换为to_xhtml,您将再次获得multiple属性值。

require 'nokogiri'
doc = Nokogiri::HTML("<!DOCTYPE html><html><input multiple='false' id='test' some='2'/><div multiple='true'></div></html>")
puts doc.to_xhtml

将输出

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <input multiple="false" id="test" some="2" />
    <div multiple="true"></div>
  </body>
</html>

Update这是因为在HTML中multiple属性(和其他属性,如disabledselected)不需要有一个值,所以Nokogiri剥离它来清理输出代码。

更新2

为什么to_xhtml保留multiple='false'代替?

因为XHTML不允许省略属性的值,所以Nokogiri保留了它们。

我认为,你能做的最好的事情是首先给Nokogiri提供适当的HTML代码,即完全省略multiple属性,而不是写multiple="false"

相关内容

  • 没有找到相关文章

最新更新