module Nokogiri
def parse string, url = nil, encoding = nil, options = nil
##
def parse string, url = nil, encoding = nil, options = nil if string.respond_to?(:read) || /^\s*<(?:!DOCTYPE\s+)?html[\s>]/i === string[0, 512] # Expect an HTML indicator to appear within the first 512 # characters of a document. (<?xml ?> + <?xml-stylesheet ?> # shouldn't be that long) Nokogiri.HTML(string, url, encoding, options || XML::ParseOptions::DEFAULT_HTML) else Nokogiri.XML(string, url, encoding, options || XML::ParseOptions::DEFAULT_XML) end.tap { |doc| yield doc if block_given? } end