    # File lib/nokogiri/xml/node.rb, line 126
          def xpath *paths
            # Pop off our custom function handler if it exists
            handler = ![
              Hash, String, Symbol
            ].include?(paths.last.class) ? paths.pop : nil

            ns = paths.last.is_a?(Hash) ? paths.pop :
              (document.root ? document.root.namespaces : {})

            return NodeSet.new(document) unless document

            sets = paths.map { |path|
              ctx = XPathContext.new(self)
              ctx.register_namespaces(ns)
              set = ctx.evaluate(path, handler).node_set
              set.document = document
              document.decorate(set)
              set
            }
            return sets.first if sets.length == 1

            NodeSet.new(document) do |combined|
              document.decorate(combined)
              sets.each do |set|
                set.each do |node|
                  combined << node
                end
              end
            end
          end