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