0

両方とも同じXMLputs Nokogiri::XML(xml)を返します。 はい、どちらもXMLを返します。puts Nokogiri.parse(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 に答える