Spec-Zone.ru › Nokogiri

класс Nokogiri::XML::Attr

Родитель:
cNokogiriXmlNode

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

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

new(document, name) Показать исходный код
static VALUE
new (int argc, VALUE *argv, VALUE klass)
{
  xmlDocPtr xml_doc;
  VALUE document;
  VALUE name;
  VALUE rest;
  xmlAttrPtr node;
  VALUE rb_node;

  rb_scan_args(argc, argv, "2*", &document, &name, &rest);

  if (! rb_obj_is_kind_of(document, cNokogiriXmlDocument)) {
    rb_raise(rb_eArgError, "parameter must be a Nokogiri::XML::Document");
  }

  Noko_Node_Get_Struct(document, xmlDoc, xml_doc);

  node = xmlNewDocProp(
           xml_doc,
           (const xmlChar *)StringValueCStr(name),
           NULL
         );

  noko_xml_document_pin_node((xmlNodePtr)node);

  rb_node = noko_xml_node_wrap(klass, (xmlNodePtr)node);
  rb_obj_call_init(rb_node, argc, argv);

  if (rb_block_given_p()) {
    rb_yield(rb_node);
  }

  return rb_node;
}

Создаёт новый элемент Attr в документе document с именем name

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

content=(p1)
Псевдоним для: value=
deconstruct_keys(array_of_names) → Hash Показать исходный код
# File lib/nokogiri/xml/attr.rb, line 55
def deconstruct_keys(keys)
  { name: name, value: value, namespace: namespace }
end

Возвращает хеш, описывающий Attr, для использования в шаблонах сопоставления.

Допустимые ключи и их значения:

  • name → (Строка) Имя атрибута.

  • value → (Строка) Значение атрибута.

  • namespace → (Namespace, null) Пространство имён атрибута или nil, если пространство имён отсутствует.

⚡ Эта функция экспериментальная, доступна начиная с версии v1.14.0

Пример

doc = Nokogiri::XML.parse(<<~XML)
  <?xml version="1.0"?>
  <root xmlns="http://nokogiri.org/ns/default" xmlns:noko="http://nokogiri.org/ns/noko">
    <child1 foo="abc" noko:bar="def"/>
  </root>
XML

attributes = doc.root.elements.first.attribute_nodes
# => [#(Attr:0x35c { name = "foo", value = "abc" }),
#     #(Attr:0x370 {
#       name = "bar",
#       namespace = #(Namespace:0x384 {
#         prefix = "noko",
#         href = "http://nokogiri.org/ns/noko"
#         }),
#       value = "def"
#       })]

attributes.first.deconstruct_keys([:name, :value, :namespace])
# => {:name=>"foo", :value=>"abc", :namespace=>nil}

attributes.last.deconstruct_keys([:name, :value, :namespace])
# => {:name=>"bar",
#     :value=>"def",
#     :namespace=>
#      #(Namespace:0x384 {
#        prefix = "noko",
#        href = "http://nokogiri.org/ns/noko"
#        })}
value=(content) Показать исходный код
static VALUE
set_value(VALUE self, VALUE content)
{
  xmlAttrPtr attr;
  xmlChar *value;
  xmlNode *cur;

  Noko_Node_Get_Struct(self, xmlAttr, attr);

  if (attr->children) {
    xmlFreeNodeList(attr->children);
  }
  attr->children = attr->last = NULL;

  if (content == Qnil) {
    return content;
  }

  value = xmlEncodeEntitiesReentrant(attr->doc, (unsigned char *)StringValueCStr(content));
  if (xmlStrlen(value) == 0) {
    attr->children = xmlNewDocText(attr->doc, value);
  } else {
    attr->children = xmlStringGetNodeList(attr->doc, value);
  }
  xmlFree(value);

  for (cur = attr->children; cur; cur = cur->next) {
    cur->parent = (xmlNode *)attr;
    cur->doc = attr->doc;
    if (cur->next == NULL) {
      attr->last = cur;
    }
  }

  return content;
}

Устанавливает значение для этого Attr на content. Используйте «null», чтобы удалить значение (например, атрибут HTML boolean).

Также является псевдонимом для: content=

© 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/Attr.html

Spec-Zone.ru

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