def method_missing(meth, *args, &block) # :nodoc:
      xpath = _xpath_for_element(meth.to_s, args.shift)
      return nil if xpath.empty?

      if block_given?
        xpath.each_with_index do |node, idx|
          @nodes.push(node)
          case block.arity
          when 1
            yield idx
          when 2
            yield self.class.new(node, @namespaces, false), idx
          else
            yield
          end
          @nodes.pop
        end
        self
      else
        node = xpath.first

        if node.xpath('text()').length == 1
          content = node.xpath('text()').first.content
          case meth.to_s
          when /\?$/
            !! Regexp.new(/(t(rue)?|y(es)?|1)/i).match(content)
          else
            content
          end
        else
          self.class.new(node, @namespaces, false)
        end
      end
    end
def method_missing(meth, *args, &block) # :nodoc:
      xpath = _xpath_for_element(meth.to_s, args.shift)
      return nil if xpath.empty?

      if block_given?
        xpath.each_with_index do |node, idx|
          @nodes.push(node)
          case block.arity
          when 1
            yield idx
          when 2
            yield self.class.new(node, @namespaces, false), idx
          else
            yield
          end
          @nodes.pop
        end
        self
      else
        node = xpath.first

        if node.xpath('text()').length == 1
          content = node.xpath('text()').first.content
          case meth.to_s
          when /\?$/
            !! Regexp.new(/(t(rue)?|y(es)?|1)/i).match(content)
          else
            content
          end
        else
          self.class.new(node, @namespaces, false)
        end
      end
    end
The workhorse, finds the node matching meth.

 Rough flow guide:
   If a block is given then yield to it each for each instance
     of the element found in the current node.
   If no block given then get the first element found
     If the node has only one text element check if the
       method called has a ? suffix then return true if node content
       looks like a boolean. Otherwise return text content
     Otherwise return a new Node instance