Class: LibXML::XML::Attr
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Instance Chain:
self,
Enumerable
|
|
| Inherits: | Object |
| Defined in: | ext/libxml/ruby_xml_attr.c, ext/libxml/ruby_xml_attr.c, lib/libxml/attr.rb |
Overview
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!
Class Method Summary
-
.new(node, "name", "value")
constructor
Creates a new attribute for the node.
Instance Attribute Summary
-
#child ⇒ node
readonly
Obtain this attribute’s child attribute(s).
-
#child? ⇒ Boolean
readonly
Returns whether this attribute has child attributes.
-
#doc ⇒ XML::Document
readonly
Returns this attribute’s document.
-
#doc? ⇒ Boolean
readonly
Determine whether this attribute is associated with an
Document. -
#last ⇒ node
readonly
Obtain the last attribute.
-
#last? ⇒ Boolean
readonly
Determine whether this is the last attribute.
-
#next ⇒ node
readonly
Obtain the next attribute.
-
#next? ⇒ Boolean
readonly
Determine whether there is a next attribute.
-
#ns ⇒ namespace
readonly
Obtain this attribute’s associated
XML::NS, if any. -
#ns? ⇒ Boolean
readonly
Determine whether this attribute has an associated namespace.
-
#parent ⇒ node
readonly
Obtain this attribute node’s parent.
-
#parent? ⇒ Boolean
readonly
Determine whether this attribute has a parent.
-
#prev ⇒ node
readonly
Obtain the previous attribute.
-
#prev? ⇒ Boolean
readonly
Determine whether there is a previous attribute.
-
#value ⇒ "value"
rw
Obtain the value of this attribute.
-
#value=("value")
rw
Sets the value of this attribute.
Instance Method Summary
-
#each(&blk)
Alias for #each_sibling.
-
#each_attr(&blk)
Alias for #each_sibling.
- #each_sibling(&blk) (also: #each_attr, #each)
-
#name ⇒ "name"
Obtain this attribute’s name.
-
#namespacess ⇒ XML::Namespaces
Returns this node’s
Namespacesobject, which is used to access the namespaces associated with this node. -
#node_type ⇒ Numeric
Obtain this node’s type identifier.
-
#node_type_name
Returns this node’s type name.
-
#remove! ⇒ nil
Removes this attribute from it’s parent.
-
#siblings(node, &blk)
Iterates nodes and attributes.
- #to_a
- #to_h
- #to_s
Constructor Details
.new(node, "name", "value")
# File 'ext/libxml/ruby_xml_attr.c', line 65
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;
}
Instance Attribute Details
#child ⇒ node (readonly)
Obtain this attribute’s child attribute(s).
# File 'ext/libxml/ruby_xml_attr.c', line 110
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);
}
#child? ⇒ Boolean (readonly)
Returns whether this attribute has child attributes.
# File 'lib/libxml/attr.rb', line 13
def child? not self.children.nil? end
#doc ⇒ XML::Document (readonly)
Returns this attribute’s document.
doc.root.attributes.get_attribute('name').doc == doc
# File 'ext/libxml/ruby_xml_attr.c', line 129
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);
}
#doc? ⇒ Boolean (readonly)
Determine whether this attribute is associated with an Document.
# File 'lib/libxml/attr.rb', line 22
def doc? not self.doc.nil? end
#last ⇒ node (readonly)
Obtain the last attribute.
# File 'ext/libxml/ruby_xml_attr.c', line 145
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);
}
#last? ⇒ Boolean (readonly)
Determine whether this is the last attribute.
# File 'lib/libxml/attr.rb', line 30
def last? self.last.nil? end
#next ⇒ node (readonly)
Obtain the next attribute.
# File 'ext/libxml/ruby_xml_attr.c', line 178
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);
}
#next? ⇒ Boolean (readonly)
Determine whether there is a next attribute.
# File 'lib/libxml/attr.rb', line 38
def next? not self.next.nil? end
#ns ⇒ namespace (readonly)
Obtain this attribute’s associated XML::NS, if any.
# File 'ext/libxml/ruby_xml_attr.c', line 207
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);
}
#ns? ⇒ Boolean (readonly)
Determine whether this attribute has an associated namespace.
# File 'lib/libxml/attr.rb', line 47
def ns? not self.ns.nil? end
#parent ⇒ node (readonly)
Obtain this attribute node’s parent.
# File 'ext/libxml/ruby_xml_attr.c', line 223
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);
}
#parent? ⇒ Boolean (readonly)
Determine whether this attribute has a parent.
# File 'lib/libxml/attr.rb', line 66
def parent? not self.parent.nil? end
#prev ⇒ node (readonly)
Obtain the previous attribute.
# File 'ext/libxml/ruby_xml_attr.c', line 239
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);
}
#prev? ⇒ Boolean (readonly)
Determine whether there is a previous attribute.
# File 'lib/libxml/attr.rb', line 74
def prev? not self.prev.nil? end
#value ⇒ "value" (rw)
Obtain the value of this attribute.
# File 'ext/libxml/ruby_xml_attr.c', line 277
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;
}
#value=("value") (rw)
Sets the value of this attribute.
# File 'ext/libxml/ruby_xml_attr.c', line 300
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);
}
Instance Method Details
#each(&blk)
Alias for #each_sibling.
# File 'lib/libxml/attr.rb', line 102
alias :each :each_sibling
#each_attr(&blk)
Alias for #each_sibling.
# File 'lib/libxml/attr.rb', line 101
alias :each_attr :each_sibling
#each_sibling(&blk) Also known as: #each_attr, #each
[ GitHub ]# File 'lib/libxml/attr.rb', line 97
def each_sibling(&blk) siblings(self,&blk) end
#name ⇒ "name"
Obtain this attribute’s name.
# File 'ext/libxml/ruby_xml_attr.c', line 161
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);
}
#namespacess ⇒ XML::Namespaces
Returns this node’s Namespaces object, which is used to access the namespaces associated with this node.
# File 'lib/libxml/attr.rb', line 57
def namespaces @namespaces ||= XML::Namespaces.new(self) end
#node_type ⇒ Numeric
Obtain this node’s type identifier.
# File 'ext/libxml/ruby_xml_attr.c', line 194
static VALUE rxml_attr_node_type(VALUE self)
{
xmlAttrPtr xattr;
Data_Get_Struct(self, xmlAttr, xattr);
return INT2NUM(xattr->type);
}
#node_type_name
Returns this node’s type name
# 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
#remove! ⇒ nil
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.
# File 'ext/libxml/ruby_xml_attr.c', line 258
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;
}
#siblings(node, &blk)
Iterates nodes and attributes
# 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