Nokogiri失去了我的属性名为'multiple'的值

时间:2013-05-13 12:18:59

标签: 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.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 =')

1 个答案:

答案 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属性(以及disabledselected等其他属性)不需要具有值,因此Nokogiri剥离它以清理输出代码。

更新2

  

为什么to_xhtml保持倍数='假'而不是?

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

我认为,您可以做的最好的事情就是首先向Nokogiri提供正确的HTML代码,即完全省略multiple属性而不是写multiple="false"