以下是代码:
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]
两者在哪里='假'??
修改
PLus,有没有办法拒绝默认修正? (使用to_xhtml可以将='false'但CDATA保留在脚本标记中)
在我的选项中,to_xhtml似乎更严格,为什么to_xhtml保持倍数='假'而不是?
EDIT2
这是我的临时解决方法:解析前 gsub(/ multiple = /,'blahhhhh'),解析后返回 gsub(/ blahhhhh /,'multiple =')
答案 0 :(得分:1)
将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>
更新会发生这种情况,因为在HTML中,multiple
属性(以及disabled
或selected
等其他属性)不需要具有值,因此Nokogiri剥离它以清理输出代码。
更新2
为什么to_xhtml保持倍数='假'而不是?
因为XHTML不允许省略属性的值,所以Nokogiri会保留它们。
我认为,您可以做的最好的事情就是首先向Nokogiri提供正确的HTML代码,即完全省略multiple
属性而不是写multiple="false"
。