为什么Nokogiri会因为反斜杠而忽略第一个属性之后的所有内容?
我不太确定它为什么这样做:
[12] pry(Template)> b
=> "<td style=\"color:#fff; padding:3px; font-size:11px; text-align:center;\">Home Improvement Agreement: Electrical Services & Standby Generators</td>"
[13] pry(Template)> Nokogiri::HTML.parse(b).to_html
=> "<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">n<html><body><td style='\"color:#fff;' padding:3px font-size:11px text-align:center>Home Improvement Agreement: Electrical Services & Standby Generators</td></body></html>n"
注意它是如何产生糟糕的HTML的,就像<td>
元素中color属性之后的所有内容一样。它关闭了属性,并将其余的变量分配为HTML name
标签,我猜。
我很好奇是否有人知道为什么Nokogiri会这样做,我能做些什么来规避它?
你要求它解析这个:
<td style="color:#fff; ...">
是无效的。这是有效的:
<td style="color:#fff; ...">
尝试:
'<td style="color:#fff; padding:3px; font-size:11px; text-align:center;">Home Improvement Agreement: Electrical Services & Standby Generators</td>'
Nokogiri可以很容易地判断解析HTML或XML文档是否有问题:
require 'nokogiri'
html = '<td style="color:#fff; padding:3px; font-size:11px; text-align:center;">Home Improvement Agreement: Electrical Services & Standby Generators</td>'
doc = Nokogiri::HTML.parse(html)
doc.errors
=> [#<Nokogiri::XML::SyntaxError: error parsing attribute name>, #<Nokogiri::XML::SyntaxError: error parsing attribute name>, #<Nokogiri::XML::SyntaxError: error parsing attribute name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>]