Nokogiri忽略了第一个属性之后的所有内容,因为有反斜杠



为什么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 &amp; 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>]

相关内容

  • 没有找到相关文章

最新更新