Spec-Zone.ru › Nokogiri

class Nokogiri::XML::Attr

Родительский класс:
Nokogiri::XML::Node

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");
  }

  xml_doc = noko_xml_document_unwrap(document);

  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=
Псевдоним для: 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 → (String) Имя атрибута.

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

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

Пример

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"
#        })}

Начиная с версии v1.14.0

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. Используйте nil, чтобы удалить значение (например, у булева атрибута HTML).

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

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

Spec-Zone.ru

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