class Nokogiri::XML::DocumentFragment
DocumentFragment представляет фрагмент XML-документа. Он предоставляет ту же функциональность, что и XML::Node, и может содержать одно или несколько поддеревьев XML.
Атрибуты
Параметры, использованные для разбора фрагмента документа. Возвращает значение параметров, переданных конструктору или заданных в блоке конфигурации, либо параметры по умолчанию для конкретного подкласса.
Общедоступные методы класса
# File lib/nokogiri/xml/document_fragment.rb, line 85
def initialize(
document, tags = nil,
context_ = nil, options_ = ParseOptions::DEFAULT_XML,
context: context_, options: options_
) # rubocop:disable Lint/MissingSuper
return self unless tags
options = Nokogiri::XML::ParseOptions.new(options) if Integer === options
@parse_options = options
yield options if block_given?
children = if context
# Fix for issue#490
if Nokogiri.jruby?
# fix for issue #770
context.parse("<root #{namespace_declarations(context)}>#{tags}</root>", options).children
else
context.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 Разбирает входную строку с фрагментом XML и возвращает новый DocumentFragment, связанный с указанным document.
💡 Рекомендуется использовать XML::DocumentFragment.parse или Node#parse, а не вызывать этот метод напрямую.
- Обязательные параметры
-
document(XML::Document) Родительский документ, с которым будет связан возвращаемый фрагмент.
- Необязательные параметры
-
input(String) Содержимое для разбора.
- Необязательные именованные аргументы
-
context:(Nokogiri::XML::Node) Контекстный узел создаваемого поддерева. Дополнительные сведения см. ниже. -
options:(Nokogiri::XML::ParseOptions) Объект конфигурации, определяющий некоторые параметры поведения при разборе. Дополнительные сведения см. вParseOptions. Значение по умолчанию —ParseOptions::DEFAULT_XML.
- Передаёт блоку
-
Если указан блок, ему передаётся объект
Nokogiri::XML::ParseOptions, который можно настроить до разбора. Дополнительные сведения см. вParseOptions. - Возвращает
Контекстный узел
Если контекстный узел указан с помощью context:, фрагмент будет создан вызовом Node#parse для этого узла, поэтому парсер будет работать так, как если бы этот Node был родителем поддерева фрагмента, и будет разрешать пространства имён относительно этого узла.
# File lib/nokogiri/xml/document_fragment.rb, line 35 def parse(tags, options_ = ParseOptions::DEFAULT_XML, options: options_, &block) new(XML::Document.new, tags, options: options, &block) end
Разбирает входную строку с фрагментом XML и возвращает новый XML::DocumentFragment. Этот метод создаёт новый пустой XML::Document для размещения фрагмента.
- Обязательные параметры
-
input(String) Содержимое для разбора.
- Необязательные именованные аргументы
-
options(Nokogiri::XML::ParseOptions) Объект конфигурации, определяющий некоторые параметры поведения при разборе. Дополнительные сведения см. вParseOptions. Значение по умолчанию —ParseOptions::DEFAULT_XML.
- Передаёт блоку
-
Если указан блок, ему передаётся объект
Nokogiri::XML::ParseOptions, который можно настроить до разбора. Дополнительные сведения см. вNokogiri::XML::ParseOptions. - Возвращает
Общедоступные методы экземпляра
# File lib/nokogiri/xml/document_fragment.rb, line 173
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 261 def deconstruct children.to_a end
Возвращает корневые узлы этого фрагмента документа в виде массива для использования при сопоставлении с образцом.
💡 Обратите внимание, что возвращаются как текстовые узлы, так и элементы. Если нужно работать только с корневыми элементами, следует выполнить деструктуризацию массива, возвращённого методом DocumentFragment#elements.
Пример
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")] })]
Начиная с версии v1.14.0
# File lib/nokogiri/xml/document_fragment.rb, line 113
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 207 def errors document.errors end
Список ошибок Nokogiri::XML::SyntaxError, обнаруженных при разборе документа
# File lib/nokogiri/xml/document_fragment.rb, line 215 def fragment(data) document.fragment(data) end
# File lib/nokogiri/xml/document_fragment.rb, line 125 def name "#document-fragment" end
возвращает имя для DocumentFragment
# File lib/nokogiri/xml/document_fragment.rb, line 192
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 138
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 131 def to_s children.to_s end
Преобразует этот DocumentFragment в строку
# File lib/nokogiri/xml/document_fragment.rb, line 150
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 162 def to_xml(*args) children.to_xml(*args) end
Преобразует этот DocumentFragment в XML. См. Nokogiri::XML::NodeSet#to_xml
© 2008–2026 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