Class: Nokogiri::XML::DocumentFragment
- Defined in:
- lib/nokogiri/xml/document_fragment.rb,
ext/nokogiri/xml_document_fragment.c
Direct Known Subclasses
Constant Summary
Constants inherited from Node
Node::ATTRIBUTE_DECL, Node::ATTRIBUTE_NODE, Node::CDATA_SECTION_NODE, Node::COMMENT_NODE, Node::DECONSTRUCT_KEYS, Node::DECONSTRUCT_METHODS, 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 ClassResolver
ClassResolver::VALID_NAMESPACES
Constants included from Searchable
Constants included from PP::Node
Class Method Summary collapse
-
.new(document) ⇒ Object
Create a new DocumentFragment element on the
document. -
.parse(tags, options = ParseOptions::DEFAULT_XML, &block) ⇒ Object
Create a Nokogiri::XML::DocumentFragment from
tags.
Instance Method Summary collapse
-
#css(*args) ⇒ Object
call-seq: css *rules, [namespace-bindings, custom-pseudo-class].
-
#deconstruct ⇒ Object
:call-seq: deconstruct() → Array.
- #dup ⇒ Object
-
#errors ⇒ Object
A list of Nokogiri::XML::SyntaxError found when parsing a document.
-
#errors=(things) ⇒ Object
:nodoc:.
- #fragment(data) ⇒ Object
-
#initialize(document, tags = nil, ctx = nil, options = ParseOptions::DEFAULT_XML) {|options| ... } ⇒ DocumentFragment
constructor
Create a new DocumentFragment from
tags. -
#name ⇒ Object
return the name for DocumentFragment.
-
#search(*rules) ⇒ Object
call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class].
-
#to_html(*args) ⇒ Object
Convert this DocumentFragment to html See Nokogiri::XML::NodeSet#to_html.
-
#to_s ⇒ Object
(also: #serialize)
Convert this DocumentFragment to a string.
-
#to_xhtml(*args) ⇒ Object
Convert this DocumentFragment to xhtml See Nokogiri::XML::NodeSet#to_xhtml.
-
#to_xml(*args) ⇒ Object
Convert this DocumentFragment to xml See Nokogiri::XML::NodeSet#to_xml.
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, #deconstruct_keys, #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 ClassResolver
Methods included from Searchable
#>, #at, #at_css, #at_xpath, #xpath
Methods included from PP::Node
Methods included from HTML5::Node
Constructor Details
#initialize(document, tags = nil, ctx = nil, options = ParseOptions::DEFAULT_XML) {|options| ... } ⇒ 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.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 19 def initialize(document, = nil, ctx = nil, = ParseOptions::DEFAULT_XML) return self unless = Nokogiri::XML::ParseOptions.new() if Integer === yield if block_given? children = if ctx # Fix for issue#490 if Nokogiri.jruby? # fix for issue #770 ctx.parse("<root #{namespace_declarations(ctx)}>#{}</root>", ).children else ctx.parse(, ) end else wrapper_doc = XML::Document.parse("<root>#{}</root>", nil, nil, ) self.errors = wrapper_doc.errors wrapper_doc.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
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'ext/nokogiri/xml_document_fragment.c', line 11
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);
noko_xml_document_pin_node(node);
rb_node = noko_xml_node_wrap(klass, node);
rb_obj_call_init(rb_node, argc, argv);
return rb_node;
}
|
.parse(tags, options = ParseOptions::DEFAULT_XML, &block) ⇒ Object
Create a Nokogiri::XML::DocumentFragment from tags
9 10 11 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 9 def self.parse(, = ParseOptions::DEFAULT_XML, &block) new(XML::Document.new, , nil, , &block) 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
102 103 104 105 106 107 108 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 102 def css(*args) if children.any? children.css(*args) # 'children' is a smell here else NodeSet.new(document) end end |
#deconstruct ⇒ Object
:call-seq: deconstruct() → Array
Returns the root nodes of this document fragment as an array, to use in pattern matching.
💡 Note that text nodes are returned as well as elements. If you wish to operate only on root elements, you should deconstruct the array returned by DocumentFragment#elements.
⚡ This is an experimental feature, available since v1.14.0
Example
frag = Nokogiri::HTML5.fragment(<<~HTML)
<div>Start</div>
This is a <a href="#jump">shortcut</a> for you.
<div>End</div>
HTML
frag.deconstruct
# => [#(Element:0x35c { name = "div", children = [ #(Text "Start")] }),
# #(Text "\n" + "This is a "),
# #(Element:0x370 {
# name = "a",
# attributes = [ #(Attr:0x384 { name = "href", value = "#jump" })],
# children = [ #(Text "shortcut")]
# }),
# #(Text " for you.\n"),
# #(Element:0x398 { name = "div", children = [ #(Text "End")] }),
# #(Text "\n")]
Example only the elements, not the text nodes.
frag.elements.deconstruct
# => [#(Element:0x35c { name = "div", children = [ #(Text "Start")] }),
# #(Element:0x370 {
# name = "a",
# attributes = [ #(Attr:0x384 { name = "href", value = "#jump" })],
# children = [ #(Text "shortcut")]
# }),
# #(Element:0x398 { name = "div", children = [ #(Text "End")] })]
190 191 192 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 190 def deconstruct children.to_a end |
#dup ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 42 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
54 55 56 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 54 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
121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 121 def search(*rules) rules, handler, ns, binds = extract_params(rules) rules.inject(NodeSet.new(document)) do |set, rule| set + if Searchable::LOOKS_LIKE_XPATH.match?(rule) 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
67 68 69 70 71 72 73 74 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 67 def to_html(*args) if Nokogiri.jruby? = args.first.is_a?(Hash) ? args.shift : {} [:save_with] ||= Node::SaveOptions::DEFAULT_HTML args.insert(0, ) end children.to_html(*args) end |
#to_s ⇒ Object Also known as: serialize
Convert this DocumentFragment to a string
60 61 62 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 60 def to_s children.to_s end |
#to_xhtml(*args) ⇒ Object
Convert this DocumentFragment to xhtml See Nokogiri::XML::NodeSet#to_xhtml
79 80 81 82 83 84 85 86 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 79 def to_xhtml(*args) if Nokogiri.jruby? = args.first.is_a?(Hash) ? args.shift : {} [:save_with] ||= Node::SaveOptions::DEFAULT_XHTML args.insert(0, ) end children.to_xhtml(*args) end |
#to_xml(*args) ⇒ Object
Convert this DocumentFragment to xml See Nokogiri::XML::NodeSet#to_xml
91 92 93 |
# File 'lib/nokogiri/xml/document_fragment.rb', line 91 def to_xml(*args) children.to_xml(*args) end |