0

两者都puts Nokogiri::XML(xml)返回puts 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

4

1 回答 1

1

Nokogiri.parse只是尝试检测传递给它的字符串是否是 HTML,然后使用预设的 ParseOption创建/返回一个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

https://github.com/sparklemotion/nokogiri/blob/master/lib/nokogiri.rb#L66

比较返回 false 因为 == 不比较对象的内容,只是它们是不同的实例:

>> Nokogiri.parse(xml) == Nokogiri.parse(xml)
=> false
于 2012-09-20T22:50:03.330 回答