класс Nokogiri::XML::DocumentFragment
DocumentFragment представляет собой узел DocumentFragment в документе xml.
Публичные методы класса
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;
} Создать новый элемент DocumentFragment в 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 Создать новый DocumentFragment из tags
Если ctx присутствует, он используется в качестве узла контекста для создаваемого поддерева, например, пространства имён будут разрешаться относительно 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
Создать Nokogiri::XML::DocumentFragment из tags
Публичные методы экземпляра
# 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 Поиск в этом фрагменте CSS rules. rules должен содержать один или несколько CSS селекторов. Например:
Дополнительная информация: Nokogiri::XML::Searchable#css
# File lib/nokogiri/xml/document_fragment.rb, line 190 def deconstruct children.to_a end
Возвращает корневые узлы этого фрагмента документа в виде массива для использования в сопоставлении шаблонов.
💡 Обратите внимание, что возвращаются также текстовые узлы, а также элементы. Если вы хотите работать только с корневыми элементами, вы должны разобрать массив, возвращенный DocumentFragment#elements
⚡ Эта функция экспериментальна, доступна начиная с версии v1.14.0
Пример
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")]
Пример только элементы, а не текстовые узлы.
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
Список Nokogiri::XML::SyntaxError, найденных при разборе документа
# 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
Возвращает имя 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 Поиск в этом фрагменте paths. paths должен содержать один или несколько XPath или CSS запросов.
Дополнительная информация: 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 Преобразование этого DocumentFragment в html См. Nokogiri::XML::NodeSet#to_html
# File lib/nokogiri/xml/document_fragment.rb, line 60 def to_s children.to_s end
Преобразование этого DocumentFragment в строку
# 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 Преобразование этого DocumentFragment в xhtml См. Nokogiri::XML::NodeSet#to_xhtml
# File lib/nokogiri/xml/document_fragment.rb, line 91 def to_xml(*args) children.to_xml(*args) end
Преобразование этого DocumentFragment в xml См. 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