hpricot.rb

Path: lib/libxml/hpricot.rb
Last Update: Sat Mar 03 17:13:20 +0000 2012
  Provide hpricot API for libxml.  Provided by Michael Guterl,
  inspired by http://thebogles.com/blog/an-hpricot-style-interface-to-libxml

class String

  def to_libxml_doc
    xp = XML::Parser.new
    xp.string = self
    xp.parse
  end

end

module LibXML

  module XML
    class Document
      alias :search :find
    end

    class Node
      # find the child node with the given xpath
      def at(xpath)
        self.find_first(xpath)
      end

      # find the array of child nodes matching the given xpath
      def search(xpath)
        results = self.find(xpath).to_a
        if block_given?
          results.each do |result|
            yield result
          end
        end
        return results
      end

      def /(xpath)
        search(xpath)
      end

      # return the inner contents of this node as a string
      def inner_xml
        child.to_s
      end

      # alias for inner_xml
      def inner_html
        inner_xml
      end

      # return this node and its contents as an xml string
      def to_xml
        self.to_s
      end

      # alias for path
      def xpath
        self.path
      end

      def find_with_default_ns(xpath_expr, namespace=nil)
        find_base(xpath_expr, namespace || default_namespaces)
      end

      def find_first_with_default_ns(xpath_expr, namespace=nil)
        find_first_base(xpath_expr, namespace || default_namespaces)
      end

       alias_method :find_base, :find unless method_defined?(:find_base)
       alias_method :find, :find_with_default_ns
       alias_method :find_first_base, :find_first unless method_defined?(:find_first_base)
       alias_method :find_first, :find_first_with_default_ns
       alias :child? :first?
       alias :children? :first?
       alias :child :first
    end
  end

end

[Validate]