class Nokogiri::XML::DocumentFragment
DocumentFragment represents a DocumentFragment node in an xml document.
Public Class Methods
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;
} Create a new DocumentFragment element on the document
# File lib/nokogiri/xml/document_fragment.rb, line 19
def initialize(document, tags = nil, ctx = nil, options = ParseOptions::DEFAULT_XML)
return self unless tags
options = Nokogiri::XML::ParseOptions.new(options) if Integer === options
yield options if block_given?
children = if ctx
# Fix for issue#490
if Nokogiri.jruby?
# fix for issue #770
ctx.parse("<root #{namespace_declarations(ctx)}>#{tags}</root>", options).children
else
ctx.parse(tags, options)
end
else
wrapper_doc = XML::Document.parse("<root>#{tags}</root>", nil, nil, options)
self.errors = wrapper_doc.errors
wrapper_doc.xpath("/root/node()")
end
children.each { |child| child.parent = self }
end 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 9 def self.parse(tags, options = ParseOptions::DEFAULT_XML, &block) new(XML::Document.new, tags, nil, options, &block) end
Create a Nokogiri::XML::DocumentFragment from tags
Public Instance Methods
# 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 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 190 def deconstruct children.to_a end
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")] })]
# 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 # File lib/nokogiri/xml/document_fragment.rb, line 136 def errors document.errors end
A list of Nokogiri::XML::SyntaxError found when parsing a document
# File lib/nokogiri/xml/document_fragment.rb, line 144 def fragment(data) document.fragment(data) end
# File lib/nokogiri/xml/document_fragment.rb, line 54 def name "#document-fragment" end
return the name for DocumentFragment
# 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 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 67
def to_html(*args)
if Nokogiri.jruby?
options = args.first.is_a?(Hash) ? args.shift : {}
options[:save_with] ||= Node::SaveOptions::DEFAULT_HTML
args.insert(0, options)
end
children.to_html(*args)
end Convert this DocumentFragment to html See Nokogiri::XML::NodeSet#to_html
# File lib/nokogiri/xml/document_fragment.rb, line 60 def to_s children.to_s end
Convert this DocumentFragment to a string
# File lib/nokogiri/xml/document_fragment.rb, line 79
def to_xhtml(*args)
if Nokogiri.jruby?
options = args.first.is_a?(Hash) ? args.shift : {}
options[:save_with] ||= Node::SaveOptions::DEFAULT_XHTML
args.insert(0, options)
end
children.to_xhtml(*args)
end Convert this DocumentFragment to xhtml See Nokogiri::XML::NodeSet#to_xhtml
# File lib/nokogiri/xml/document_fragment.rb, line 91 def to_xml(*args) children.to_xml(*args) end
Convert this DocumentFragment to xml See Nokogiri::XML::NodeSet#to_xml
© 2008–2023 by Mike Dalessio, Aaron Patterson, Yoko Harada, Akinori MUSHA, John Shahid,
Karol Bucek, Sam Ruby, Craig Barnes, Stephen Checkoway, Lars Kanis, Sergio Arbeo,
Timothy Elliott, Nobuyoshi Nakada, Charles Nutter, Patrick MahoneyLicensed under the MIT License.
https://nokogiri.org/rdoc/Nokogiri/XML/DocumentFragment.html