代码:
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
属性(和其他属性,如disabled
或selected
)不需要有一个值,所以Nokogiri剥离它来清理输出代码。
更新2
为什么to_xhtml保留multiple='false'代替?
因为XHTML不允许省略属性的值,所以Nokogiri保留了它们。
我认为,你能做的最好的事情是首先给Nokogiri提供适当的HTML代码,即完全省略multiple
属性,而不是写multiple="false"
。