class LibXML::XML::Attr
Provides access to an attribute defined on an element.
Basic Usage:
require 'test_helper' doc = XML::Document.new(<some_file>) attribute = doc.root.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href') attribute.name == 'href' attribute.value == 'http://www.mydocument.com' attribute.remove!
Public Class Methods
Source
static VALUE rxml_attr_initialize(int argc, VALUE *argv, VALUE self) { VALUE node = argv[0]; VALUE name = argv[1]; VALUE value = argv[2]; VALUE ns = (argc == 4 ? argv[3] : Qnil); xmlNodePtr xnode; xmlAttrPtr xattr; if (argc < 3 || argc > 4) rb_raise(rb_eArgError, "Wrong number of arguments (3 or 4)"); Check_Type(name, T_STRING); Check_Type(value, T_STRING); Data_Get_Struct(node, xmlNode, xnode); if (xnode->type != XML_ELEMENT_NODE) rb_raise(rb_eArgError, "Attributes can only be created on element nodes."); if (NIL_P(ns)) { xattr = xmlNewProp(xnode, (xmlChar*)StringValuePtr(name), (xmlChar*)StringValuePtr(value)); } else { xmlNsPtr xns; Data_Get_Struct(ns, xmlNs, xns); xattr = xmlNewNsProp(xnode, xns, (xmlChar*)StringValuePtr(name), (xmlChar*)StringValuePtr(value)); } if (!xattr) rb_raise(rb_eRuntimeError, "Could not create attribute."); DATA_PTR( self) = xattr; return self; }
Creates a new attribute for the node.
node: The XML::Node
that will contain the attribute name: The name of the attribute value: The value of the attribute
attr = XML::Attr.new(doc.root, 'name', 'libxml')
Public Instance Methods
Source
static VALUE rxml_attr_child_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->children == NULL) return Qnil; else return rxml_node_wrap((xmlNodePtr) xattr->children); }
Obtain this attribute’s child attribute(s).
Source
# File lib/libxml/attr.rb, line 13 def child? not self.children.nil? end
Returns whether this attribute has child attributes.
Source
static VALUE rxml_attr_doc_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->doc == NULL) return Qnil; else return rxml_document_wrap(xattr->doc); }
Returns this attribute’s document.
doc.root.attributes.get_attribute('name').doc == doc
Source
# File lib/libxml/attr.rb, line 22 def doc? not self.doc.nil? end
Determine whether this attribute is associated with an XML::Document
.
Source
# File lib/libxml/attr.rb, line 97 def each_sibling(&blk) siblings(self,&blk) end
Source
static VALUE rxml_attr_last_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->last == NULL) return Qnil; else return rxml_node_wrap(xattr->last); }
Obtain the last attribute.
Source
# File lib/libxml/attr.rb, line 30 def last? self.last.nil? end
Determine whether this is the last attribute.
Source
static VALUE rxml_attr_name_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->name == NULL) return Qnil; else return rxml_new_cstr( xattr->name, NULL); }
Obtain this attribute’s name.
Source
# File lib/libxml/attr.rb, line 57 def namespaces @namespaces ||= XML::Namespaces.new(self) end
Returns this node’s XML::Namespaces
object, which is used to access the namespaces associated with this node.
Source
static VALUE rxml_attr_next_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->next == NULL) return Qnil; else return rxml_attr_wrap(xattr->next); }
Obtain the next attribute.
Source
# File lib/libxml/attr.rb, line 38 def next? not self.next.nil? end
Determine whether there is a next attribute.
Source
static VALUE rxml_attr_node_type(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); return INT2NUM(xattr->type); }
Obtain this node’s type identifier.
Source
# File lib/libxml/attr.rb, line 79 def node_type_name if node_type == Node::ATTRIBUTE_NODE 'attribute' else raise(UnknownType, "Unknown node type: %n", node.node_type); end end
Returns this node’s type name
Source
static VALUE rxml_attr_ns_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->ns == NULL) return Qnil; else return rxml_namespace_wrap(xattr->ns); }
Obtain this attribute’s associated XML::NS, if any.
Source
# File lib/libxml/attr.rb, line 47 def ns? not self.ns.nil? end
Determine whether this attribute has an associated namespace.
Source
static VALUE rxml_attr_parent_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->parent == NULL) return Qnil; else return rxml_node_wrap(xattr->parent); }
Obtain this attribute node’s parent.
Source
# File lib/libxml/attr.rb, line 66 def parent? not self.parent.nil? end
Determine whether this attribute has a parent.
Source
static VALUE rxml_attr_prev_get(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); if (xattr->prev == NULL) return Qnil; else return rxml_attr_wrap(xattr->prev); }
Obtain the previous attribute.
Source
# File lib/libxml/attr.rb, line 74 def prev? not self.prev.nil? end
Determine whether there is a previous attribute.
Source
static VALUE rxml_attr_remove_ex(VALUE self) { xmlAttrPtr xattr; Data_Get_Struct(self, xmlAttr, xattr); xmlRemoveProp(xattr); RDATA(self)->data = NULL; RDATA(self)->dfree = NULL; RDATA(self)->dmark = NULL; return Qnil; }
Removes this attribute from it’s parent. Note the attribute and its content is freed and can no longer be used. If you try to use it you will get a segmentation fault.
Source
# File lib/libxml/attr.rb, line 88 def siblings(node, &blk) if n = node loop do blk.call(n) break unless n = n.next end end end
Iterates nodes and attributes
Source
# File lib/libxml/attr.rb, line 111 def to_a inject([]) do |ary,a| ary << [a.name, a.value] ary end end
Source
# File lib/libxml/attr.rb, line 104 def to_h inject({}) do |h,a| h[a.name] = a.value h end end
Source
VALUE rxml_attr_value_get(VALUE self) { xmlAttrPtr xattr; xmlChar *value; VALUE result = Qnil; Data_Get_Struct(self, xmlAttr, xattr); value = xmlNodeGetContent((xmlNodePtr)xattr); if (value != NULL) { result = rxml_new_cstr( value, NULL); xmlFree(value); } return result; }
Obtain the value of this attribute.
Source
VALUE rxml_attr_value_set(VALUE self, VALUE val) { xmlAttrPtr xattr; Check_Type(val, T_STRING); Data_Get_Struct(self, xmlAttr, xattr); if (xattr->ns) xmlSetNsProp(xattr->parent, xattr->ns, xattr->name, (xmlChar*) StringValuePtr(val)); else xmlSetProp(xattr->parent, xattr->name, (xmlChar*) StringValuePtr(val)); return (self); }
Sets the value of this attribute.