class Nokogiri::XML::Attr
Публичные методы класса
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
Публичные методы экземпляра
# 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
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).
© 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