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”