class Nokogiri::XML::DocumentFragment - nokogiri-1.8.0 Documentation

# class Nokogiri::XML::DocumentFragment

DocumentFragment represents a DocumentFragment node in an xml document.

### Public Class Methods

new(document, tags = nil, ctx = nil) click to toggle source

Create a new DocumentFragment from `tags`.

If `ctx` is present, it is used as a context node for the subtree created, e.g., namespaces will be resolved relative to `ctx`.

    # File lib/nokogiri/xml/document_fragment.rb, line 10
    def initialize document, tags = nil, ctx = nil
      return self unless tags

      children = if ctx
                   # Fix for issue#490
                   if Nokogiri.jruby?
                     # fix for issue #770
                     ctx.parse("<root #{namespace_declarations(ctx)}>#{tags}</root>").children
                   else
                     ctx.parse(tags)
                   end
                 else
                   XML::Document.parse("<root>#{tags}</root>")                         .xpath("/root/node()")
                 end
      children.each { |child| child.parent = self }
    end

new(document) click to toggle source

Create a new DocumentFragment element on the `document`

    static VALUE new(int argc, VALUE *argv, VALUE klass)
    {
      xmlDocPtr xml_doc;
      xmlNodePtr node;
      VALUE document;
      VALUE rest;
      VALUE rb_node;

      rb_scan_args(argc, argv, "1*", &document, &rest);

      Data_Get_Struct(document, xmlDoc, xml_doc);

      node = xmlNewDocFragment(xml_doc->doc);

      nokogiri_root_node(node);

      rb_node = Nokogiri_wrap_xml_node(klass, node);
      rb_obj_call_init(rb_node, argc, argv);

      if(rb_block_given_p()) rb_yield(rb_node);

      return rb_node;
    }

parse(tags) click to toggle source

Create a Nokogiri::XML::DocumentFragment from `tags`

    # File lib/nokogiri/xml/document_fragment.rb, line 118
    def parse tags
      self.new(XML::Document.new, tags)
    end

### Public Instance Methods

css *rules, [namespace-bindings, custom-pseudo-class] click to toggle source

Search this fragment for CSS `rules`. `rules` must be one or more CSS selectors. For example:

For more information see Nokogiri::XML::Searchable#css

    # File lib/nokogiri/xml/document_fragment.rb, line 82
    def css *args
      if children.any?
        children.css(*args) # 'children' is a smell here
      else
        NodeSet.new(document)
      end
    end

errors() click to toggle source

A list of Nokogiri::XML::SyntaxError found when parsing a document

    # File lib/nokogiri/xml/document_fragment.rb, line 124
    def errors
      document.errors
    end

name() click to toggle source

return the name for DocumentFragment

    # File lib/nokogiri/xml/document_fragment.rb, line 30
    def name
      '#document-fragment'
    end

search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class] click to toggle source

Search this fragment for `paths`. `paths` must be one or more XPath or CSS queries.

For more information see Nokogiri::XML::Searchable#search

    # File lib/nokogiri/xml/document_fragment.rb, line 101
    def search *rules
      rules, handler, ns, binds = extract_params(rules)

      rules.inject(NodeSet.new(document)) do |set, rule|
        set += if rule =~ Searchable::LOOKS_LIKE_XPATH
                 xpath(*([rule, ns, handler, binds].compact))
               else
                 children.css(*([rule, ns, handler].compact)) # 'children' is a smell here
               end
      end
    end

serialize()
Alias for: to_s
to_html(*args) click to toggle source

Convert this DocumentFragment to html See Nokogiri::XML::NodeSet#to_html

    # File lib/nokogiri/xml/document_fragment.rb, line 43
    def to_html *args
      if Nokogiri.jruby?
        options = args.first.is_a?(Hash) ? args.shift : {}
        if !options[:save_with]
          options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
        end
        args.insert(0, options)
      end
      children.to_html(*args)
    end

to_s() click to toggle source

Convert this DocumentFragment to a string

    # File lib/nokogiri/xml/document_fragment.rb, line 36
    def to_s
      children.to_s
    end

Also aliased as: serialize
to_xhtml(*args) click to toggle source

Convert this DocumentFragment to xhtml See Nokogiri::XML::NodeSet#to_xhtml

    # File lib/nokogiri/xml/document_fragment.rb, line 57
    def to_xhtml *args
      if Nokogiri.jruby?
        options = args.first.is_a?(Hash) ? args.shift : {}
        if !options[:save_with]
          options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_XHTML
        end
        args.insert(0, options)
      end
      children.to_xhtml(*args)
    end

to_xml(*args) click to toggle source

Convert this DocumentFragment to xml See Nokogiri::XML::NodeSet#to_xml

    # File lib/nokogiri/xml/document_fragment.rb, line 71
    def to_xml *args
      children.to_xml(*args)
    end

### Private Instance Methods

coerce(data) click to toggle source
Calls superclass method

    # File lib/nokogiri/xml/document_fragment.rb, line 142
    def coerce data
      return super unless String === data

      document.fragment(data).children
    end

namespace_declarations(ctx) click to toggle source

fix for issue 770

    # File lib/nokogiri/xml/document_fragment.rb, line 135
    def namespace_declarations ctx
      ctx.namespace_scopes.map do |namespace|
        prefix = namespace.prefix.nil? ? "" : ":#{namespace.prefix}"
        %Q{xmlns#{prefix}="#{namespace.href}"}
      end.join ' '
    end