Class: LibXML::XML::Attributes
- Inherits:
-
Object
- Object
- LibXML::XML::Attributes
- Includes:
- Enumerable
- Defined in:
- ext/libxml/ruby_xml_attributes.c,
lib/libxml/attributes.rb,
ext/libxml/ruby_xml_attributes.c
Overview
Provides access to an element’s attributes (XML::Attr).
Basic Usage:
require 'test_helper'
doc = XML::Document.new(<some_file>)
attributes = doc.root.attributes
attributes.each do |attribute|
..
end
attributes['foo'] = 'bar'
attribute = attributes.get_attribute['foo']
attribute.value == 'foo'
To access a namespaced attribute:
XLINK_URI = 'http://www.w3.org/1999/xlink'
attribute = attributes.get_attribute_ns(XLINK_URI, 'title')
attribute.value = 'My title'
Instance Method Summary collapse
-
#[]("name") ⇒ String
Fetches an attribute value.
-
#[]=("name") ⇒ Object
Sets an attribute value.
-
#each { ... } ⇒ XML::Attr
Iterates over each attribute.
-
#first ⇒ XML::Attr
Returns the first attribute.
-
#get_attribute("name") ⇒ (XML::Attr | XML::AtrrDecl)
Returns the specified attribute.
-
#get_attribute_ns("namespace", "name") ⇒ (XML::Attr | XML::AtrrDecl)
Returns the specified attribute.
-
#length ⇒ Integer
Returns the number of attributes.
-
#node ⇒ XML::Node
Return the node that owns this attributes list.
- #to_h ⇒ Object
Instance Method Details
#[]("name") ⇒ String
Fetches an attribute value. If you want to access the underlying Attribute itself use get_attribute.
name: The name of the attribute, not including any namespaces.
doc.root.attributes['att'] -> 'some value'
150 151 152 153 154 155 156 157 158 |
# File 'ext/libxml/ruby_xml_attributes.c', line 150
VALUE rxml_attributes_attribute_get(VALUE self, VALUE name)
{
VALUE xattr = rxml_attributes_get_attribute(self, name);
if (NIL_P(xattr))
return Qnil;
else
return rxml_attr_value_get(xattr);
}
|
#[]=("name") ⇒ Object
Sets an attribute value. If you want to get the Attribute itself, use get_attribute.
name: The name of the attribute, not including any namespaces. value: The new value of the namespace.
doc.root.attributes['att'] = 'some value'
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'ext/libxml/ruby_xml_attributes.c', line 172
VALUE rxml_attributes_attribute_set(VALUE self, VALUE name, VALUE value)
{
VALUE xattr = rxml_attributes_get_attribute(self, name);
if (NIL_P(xattr))
{
VALUE args[3];
args[0] = rxml_attributes_node_get(self);
args[1] = name;
args[2] = value;
return rb_class_new_instance(sizeof(args)/sizeof(VALUE), args, cXMLAttr);
}
else
{
return rxml_attr_value_set(xattr, value);
}
}
|
#each { ... } ⇒ XML::Attr
Iterates over each attribute.
doc.root.attributes.each {|attribute| puts attribute.name}
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'ext/libxml/ruby_xml_attributes.c', line 199
static VALUE rxml_attributes_each(VALUE self)
{
xmlNodePtr xnode;
xmlAttrPtr xattr;
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
xattr = xnode->properties;
while (xattr)
{
/* Get the next attribute while we still can - the user
may remove the yielded attribute. */
xmlAttrPtr next = xattr->next;
VALUE attr = rxml_attr_wrap(xattr);
rb_yield(attr);
xattr = next;
}
return self;
}
|
#first ⇒ XML::Attr
Returns the first attribute.
doc.root.attributes.first
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
# File 'ext/libxml/ruby_xml_attributes.c', line 255
static VALUE rxml_attributes_first(VALUE self)
{
xmlNodePtr xnode;
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
if (xnode->type == XML_ELEMENT_NODE)
{
xmlAttrPtr xattr = xnode->properties;
if (xattr)
{
return rxml_attr_wrap(xattr);
}
}
return Qnil;
}
|
#get_attribute("name") ⇒ (XML::Attr | XML::AtrrDecl)
Returns the specified attribute. If the attribute does not exist but the document has an associated DTD that defines a default value for the attribute, then a XML::AttrDecl is returned.
name: The name of the attribute, not including a namespace.
doc.root.attributes.get_attribute("foo")
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'ext/libxml/ruby_xml_attributes.c', line 85
static VALUE rxml_attributes_get_attribute(VALUE self, VALUE name)
{
xmlNodePtr xnode;
xmlAttrPtr xattr;
name = rb_obj_as_string(name);
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
xattr = xmlHasProp(xnode, (xmlChar*) StringValuePtr(name));
if (!xattr)
return Qnil;
else if (xattr->type == XML_ATTRIBUTE_DECL)
return rxml_attr_decl_wrap((xmlAttributePtr)xattr);
else
return rxml_attr_wrap(xattr);
}
|
#get_attribute_ns("namespace", "name") ⇒ (XML::Attr | XML::AtrrDecl)
Returns the specified attribute. If the attribute does not exist but the document has an associated DTD that defines a default value for the attribute, then a XML::AttrDecl is returned.
namespace: The URI of the attribute’s namespace. name: The name of the attribute, not including a namespace.
doc.root.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href')
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'ext/libxml/ruby_xml_attributes.c', line 118
static VALUE rxml_attributes_get_attribute_ns(VALUE self, VALUE namespace,
VALUE name)
{
xmlNodePtr xnode;
xmlAttrPtr xattr;
name = rb_obj_as_string(name);
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
xattr = xmlHasNsProp(xnode, (xmlChar*) StringValuePtr(name),
(xmlChar*) StringValuePtr(namespace));
if (!xattr)
return Qnil;
else if (xattr->type == XML_ATTRIBUTE_DECL)
return rxml_attr_decl_wrap((xmlAttributePtr)xattr);
else
return rxml_attr_wrap(xattr);
}
|
#length ⇒ Integer
Returns the number of attributes.
doc.root.attributes.length
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'ext/libxml/ruby_xml_attributes.c', line 229
static VALUE rxml_attributes_length(VALUE self)
{
int length = 0;
xmlNodePtr xnode;
xmlAttrPtr xattr;
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
xattr = xnode->properties;
while (xattr)
{
length++;
xattr = xattr->next;
}
return INT2NUM(length);
}
|
#node ⇒ XML::Node
Return the node that owns this attributes list.
doc.root.attributes.node == doc.root
65 66 67 68 69 70 |
# File 'ext/libxml/ruby_xml_attributes.c', line 65
VALUE rxml_attributes_node_get(VALUE self)
{
xmlNodePtr xnode;
TypedData_Get_Struct(self, xmlNode, &rxml_attributes_data_type, xnode);
return rxml_node_wrap(xnode);
}
|
#to_h ⇒ Object
6 7 8 9 10 11 |
# File 'lib/libxml/attributes.rb', line 6 def to_h inject({}) do |hash, attr| hash[attr.name] = attr.value hash end end |