Ruby Nokogiri失去我的属性';名为';多重';

Ruby Nokogiri失去我的属性';名为';多重';,ruby,nokogiri,Ruby,Nokogiri,代码如下: 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.att

代码如下:

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
需要“nokogiri”
doc=Nokogiri::HTML(“”)
放置文档错误
文件css(“输入”)。每个文件|
放置el.attributes['multiple']
结束
将文档放入html
以下是输出:

false
<!DOCTYPE html>
<html><body>
<input multiple id="test" some="2"><div multiple></div>
</body></html>
[Finished in 2.0s]
false
[在2.0秒内完成]
这两个‘假’在哪里

编辑

另外,有没有办法拒绝默认修正??(用于\u xhtml可以将='false'but和CDATA保留在脚本标记中)

在我的选择中,使用xhtml似乎更为严格,为什么要使用multiple='false'来代替呢

EDIT2


这里是我的临时解决方法:gsub(/multiple=/,'blahhhh')解析前和gsub(/blahhhh/,'multiple=')解析后返回将
替换为
到xhtml
,您将再次获得
多个
属性值

require 'nokogiri'
doc = Nokogiri::HTML("<!DOCTYPE html><html><input multiple='false' id='test' some='2'/><div multiple='true'></div></html>")
puts doc.to_xhtml
需要“nokogiri”
doc=Nokogiri::HTML(“”)
将文档放入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中,
多个
属性(以及其他属性,如
禁用
选定
)不需要有值,所以Nokogiri会将其剥离以清除输出代码

更新2

为什么要保留multiple='false'呢

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


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

我也测试了to_xhtml的工作原理,但是xhtml给HTML5带来了更多的问题,仍然debugging@rhapsodyn如果您正在使用HTML5,请记住
multiple
multiple=“true”
multiple=“false”
都是等效的。
浏览器忽略了这些属性的值。
Nokogiri不是浏览器,它是解析器,它很清楚HTML规范所说的标记应该是什么样子,因此,当您使用
请求HTML输出时,它不会显示
=“false”
=“true”
。它正在进行一些清理以生成正确的HTML。
这两个'false'在哪里??
?只有一个
“false”
和一个
“true”