Ruby on rails Nokogiri::XML和Nokogiri.parse之间的区别?
Ruby on rails Nokogiri::XML和Nokogiri.parse之间的区别?,ruby-on-rails,ruby,nokogiri,Ruby On Rails,Ruby,Nokogiri,put Nokogiri::XML(XML)和put Nokogiri.parse(XML)都返回相同的XML。 是的,它们都返回XML: > Nokogiri::XML(xml).class => Nokogiri::XML::Document > Nokogiri.parse(xml).class => Nokogiri::XML::Document 但是,在比较返回值时,我得到: > Nokogiri.parse(xml) === Nokog
put Nokogiri::XML(XML)
和put Nokogiri.parse(XML)
都返回相同的XML。是的,它们都返回XML:
> Nokogiri::XML(xml).class
=> Nokogiri::XML::Document
> Nokogiri.parse(xml).class
=> Nokogiri::XML::Document
但是,在比较返回值时,我得到:
> Nokogiri.parse(xml) === Nokogiri::XML(xml)
=> false
> Nokogiri.parse(xml) == Nokogiri::XML(xml)
=> false
Nokogiri::XML
和Nokogiri.parse
之间有什么区别?Nokogiri.parse
只是尝试检测传递给它的字符串是否是HTML,然后创建/返回一个带有预设parse选项的Nokogiri::XML
或Nokogiri::HTML
实例:
def parse string, url = nil, encoding = nil, options = nil
doc =
if string.respond_to?(:read) ||
string =~ /^\s*<[^Hh>]*html/i # Probably html
Nokogiri.HTML(
string,
url,
encoding, options || XML::ParseOptions::DEFAULT_HTML
)
else
Nokogiri.XML(string, url, encoding,
options || XML::ParseOptions::DEFAULT_XML)
end
yield doc if block_given?
doc
end
这也会使
Nokogiri.parse(xml)
比Nokogiri::xml(xml)
慢吗?Nokogiri.parse
会稍微慢一点,但差别可以忽略。显式地告诉Nokogiri文档的类型,而不是让它来确定。我曾经经历过这样的情况:使用的启发式方法被愚弄了,返回了错误的文档类型。
>> Nokogiri.parse(xml) == Nokogiri.parse(xml)
=> false