Last Modified
2013-09-24 04:21:51 +0000
Requires

Description

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