Spec-Zone.ru › Nokogiri

класс Nokogiri::XML::DocumentFragment

Родитель:
cNokogiriXmlNode

DocumentFragment представляет собой узел DocumentFragment в документе xml.

Публичные методы класса

new(document) Показать исходный код
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

new(document, tags = nil, ctx = nil, options = ParseOptions::DEFAULT_XML) { |options| ... } Показать исходный код
# 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

parse(tags, options = ParseOptions::DEFAULT_XML, &block) Показать исходный код
# 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

Публичные методы экземпляра

css *rules, [namespace-bindings, custom-pseudo-class] Показать исходный код
# 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

deconstruct() → Array Показать исходный код
# 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")] })]
dup() Показать исходный код
# 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() Показать исходный код
# File lib/nokogiri/xml/document_fragment.rb, line 136
def errors
  document.errors
end

Список Nokogiri::XML::SyntaxError, найденных при разборе документа

fragment(data) Показать исходный код
# File lib/nokogiri/xml/document_fragment.rb, line 144
def fragment(data)
  document.fragment(data)
end
name() Показать исходный код
# File lib/nokogiri/xml/document_fragment.rb, line 54
def name
  "#document-fragment"
end

Возвращает имя DocumentFragment

search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class] Показать исходный код
# 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

serialize()
Псевдоним для: to_s
to_html(*args) Показать исходный код
# 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

to_s() Показать исходный код
# File lib/nokogiri/xml/document_fragment.rb, line 60
def to_s
  children.to_s
end

Преобразование этого DocumentFragment в строку

Также алиас: serialize
to_xhtml(*args) Показать исходный код
# 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

to_xml(*args) Показать исходный код
# 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API