File: hpricot.rb [libxml-ruby-2.7.0 Documentation]

Last Modified
  2014-01-23 02:52:55 +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