Class: Nokogiri::XML::DocumentFragment

Inherits:
Node
  • Object
show all
Defined in:
lib/nokogiri/xml/document_fragment.rb,
ext/nokogiri/xml_document_fragment.c

Direct Known Subclasses

HTML::DocumentFragment

Constant Summary

Constants inherited from Node

Node::ATTRIBUTE_DECL, Node::ATTRIBUTE_NODE, Node::CDATA_SECTION_NODE, Node::COMMENT_NODE, Node::DOCB_DOCUMENT_NODE, Node::DOCUMENT_FRAG_NODE, Node::DOCUMENT_NODE, Node::DOCUMENT_TYPE_NODE, Node::DTD_NODE, Node::ELEMENT_DECL, Node::ELEMENT_NODE, Node::ENTITY_DECL, Node::ENTITY_NODE, Node::ENTITY_REF_NODE, Node::HTML_DOCUMENT_NODE, Node::NAMESPACE_DECL, Node::NOTATION_NODE, Node::PI_NODE, Node::TEXT_NODE, Node::XINCLUDE_END, Node::XINCLUDE_START

Constants included from Searchable

Searchable::LOOKS_LIKE_XPATH

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Node

#<<, #<=>, #==, #>, #[], #[]=, #accept, #add_child, #add_class, #add_namespace_definition, #add_next_sibling, #add_previous_sibling, #after, #ancestors, #append_class, #attribute, #attribute_nodes, #attribute_with_ns, #attributes, #before, #blank?, #canonicalize, #cdata?, #child, #children, #children=, #classes, #comment?, #content, #content=, #create_external_subset, #create_internal_subset, #css_path, #decorate!, #default_namespace=, #description, #do_xinclude, #document, #document?, #each, #element?, #element_children, #encode_special_chars, #external_subset, #first_element_child, #fragment?, #html?, #inner_html, #inner_html=, #internal_subset, #key?, #keys, #kwattr_add, #kwattr_append, #kwattr_remove, #kwattr_values, #lang, #lang=, #last_element_child, #line, #line=, #matches?, #namespace, #namespace=, #namespace_definitions, #namespace_scopes, #namespaced_key?, #namespaces, #native_content=, #next_element, #next_sibling, #node_name, #node_name=, #node_type, #parent, #parent=, #parse, #path, #pointer_id, #prepend_child, #previous_element, #previous_sibling, #processing_instruction?, #read_only?, #remove_attribute, #remove_class, #replace, #swap, #text?, #traverse, #unlink, #value?, #values, #wrap, #write_html_to, #write_to, #write_xhtml_to, #write_xml_to, #xml?

Methods included from Searchable

#at, #at_css, #at_xpath, #xpath

Methods included from PP::Node

#inspect, #pretty_print

Constructor Details

#initialize(document, tags = nil, ctx = nil) ⇒ DocumentFragment

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.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/nokogiri/xml/document_fragment.rb', line 11

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

Class Method Details

.new(document) ⇒ Object

Create a new DocumentFragment element on the document



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'ext/nokogiri/xml_document_fragment.c', line 9

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) ⇒ Object

Create a Nokogiri::XML::DocumentFragment from tags



130
131
132
# File 'lib/nokogiri/xml/document_fragment.rb', line 130

def parse tags
  self.new(XML::Document.new, tags)
end

Instance Method Details

#css(*args) ⇒ Object

call-seq: css *rules, [namespace-bindings, custom-pseudo-class]

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

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



94
95
96
97
98
99
100
# File 'lib/nokogiri/xml/document_fragment.rb', line 94

def css *args
  if children.any?
    children.css(*args) # 'children' is a smell here
  else
    NodeSet.new(document)
  end
end

#dup ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/nokogiri/xml/document_fragment.rb', line 30

def dup
  new_document = document.dup
  new_fragment = self.class.new(new_document)
  children.each do |child|
    child.dup(1, new_document).parent = new_fragment
  end
  new_fragment
end

#errors ⇒ Object

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



136
137
138
# File 'lib/nokogiri/xml/document_fragment.rb', line 136

def errors
  document.errors
end

#errors=(things) ⇒ Object

:nodoc:



140
141
142
# File 'lib/nokogiri/xml/document_fragment.rb', line 140

def errors= things # :nodoc:
  document.errors = things
end

#fragment(data) ⇒ Object



144
145
146
# File 'lib/nokogiri/xml/document_fragment.rb', line 144

def fragment(data)
  document.fragment(data)
end

#name ⇒ Object

return the name for DocumentFragment



42
43
44
# File 'lib/nokogiri/xml/document_fragment.rb', line 42

def name
  '#document-fragment'
end

#search(*rules) ⇒ Object

call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]

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

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



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/nokogiri/xml/document_fragment.rb', line 113

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

#to_html(*args) ⇒ Object

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



55
56
57
58
59
60
61
62
63
64
# File 'lib/nokogiri/xml/document_fragment.rb', line 55

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 ⇒ Object Also known as: serialize

Convert this DocumentFragment to a string



48
49
50
# File 'lib/nokogiri/xml/document_fragment.rb', line 48

def to_s
  children.to_s
end

#to_xhtml(*args) ⇒ Object

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



69
70
71
72
73
74
75
76
77
78
# File 'lib/nokogiri/xml/document_fragment.rb', line 69

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) ⇒ Object

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



83
84
85
# File 'lib/nokogiri/xml/document_fragment.rb', line 83

def to_xml *args
  children.to_xml(*args)
end