class LibXML::XML::Namespace
The Namespace class represents an XML namespace. To add a namespace to a node, create a new instance of this class. Note that this does not assign the node to the namespace. To do that see the XML::Namespaces#namespace method.
Usage:
node = XML::Node.new('<Envelope>') XML::Namespace.new(node, 'soap', 'http://schemas.xmlsoap.org/soap/envelope/') assert_equal("<Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"/>", node.to_s) assert_nil(node.namespaces.namespace)
Public Class Methods
Source
static VALUE rxml_namespace_initialize(VALUE self, VALUE node, VALUE prefix,
VALUE href)
{
xmlNodePtr xnode;
xmlChar *xmlPrefix;
xmlNsPtr xns;
TypedData_Get_Struct(node, xmlNode, &rxml_node_data_type, xnode);
xmlResetLastError();
/* Prefix can be null - that means its the default namespace */
xmlPrefix = NIL_P(prefix) ? NULL : (xmlChar *)StringValuePtr(prefix);
xns = xmlNewNs(xnode, (xmlChar*) StringValuePtr(href), xmlPrefix);
RTYPEDDATA_DATA(self) = xns;
return self;
}
Create a new namespace and adds it to the specified node. Note this does not assign the node to the namespace. To do that see the XML::Namespaces#namespace method.
Public Instance Methods
Source
# File lib/libxml/namespace.rb 14 def <=>(other) 15 if self.prefix.nil? and other.prefix.nil? 16 self.href <=> other.href 17 elsif self.prefix.nil? 18 -1 19 elsif other.prefix.nil? 20 1 21 else 22 self.prefix <=> other.prefix 23 end 24 end
Compares two namespace objects. Namespace objects are considered equal if their prefixes and hrefs are the same.
Source
# File lib/libxml/namespace.rb 37 def each 38 ns = self 39 40 while ns 41 yield ns 42 ns = ns.next 43 end 44 end
libxml stores namespaces in memory as a linked list. Use the each method to iterate over the list. Note the first namespace in the loop is the current namespace.
Usage:
namespace.each do |ns| .. end
Source
static VALUE rxml_namespace_href_get(VALUE self)
{
xmlNsPtr xns;
TypedData_Get_Struct(self, xmlNs, &rxml_namespace_type, xns);
if (xns->href == NULL)
return Qnil;
else
return rxml_new_cstr( xns->href, NULL);
}
Usage:
doc = XML::Document.string('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/>') ns = doc.root.namespaces.find_by_href('http://schemas.xmlsoap.org/soap/envelope/') assert_equal('http://schemas.xmlsoap.org/soap/envelope/', ns.href)
Source
static VALUE rxml_namespace_next(VALUE self)
{
xmlNsPtr xns;
TypedData_Get_Struct(self, xmlNs, &rxml_namespace_type, xns);
/* Guard against libxml2's XPath hack where xns->next stores a parent
element pointer instead of the next namespace (see xmlXPathNodeSetAddNs
in xpath.c). xmlNs.type and xmlNode.type share the same struct offset,
so checking the type is safe even when next points to an xmlNode. */
if (xns == NULL || xns->next == NULL || xns->next->type != XML_LOCAL_NAMESPACE)
return (Qnil);
return rxml_namespace_wrap(xns->next);
}
Obtain the next namespace.
Usage:
doc = XML::Document.string('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/>') ns = doc.root.namespaces.find_by_href('http://schemas.xmlsoap.org/soap/envelope/') assert_nil(ns.next)
Source
static VALUE rxml_namespace_node_type(VALUE self)
{
xmlNsPtr xns;
TypedData_Get_Struct(self, xmlNs, &rxml_namespace_type, xns);
return INT2NUM(xns->type);
}
Obtain this namespace’s type identifier.
Source
static VALUE rxml_namespace_prefix_get(VALUE self)
{
xmlNsPtr xns;
TypedData_Get_Struct(self, xmlNs, &rxml_namespace_type, xns);
if (xns->prefix == NULL)
return Qnil;
else
return rxml_new_cstr( xns->prefix, NULL);
}
Obtain the namespace’s prefix.
Usage:
doc = XML::Document.string('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/>') ns = doc.root.namespaces.find_by_href('http://schemas.xmlsoap.org/soap/envelope/') assert_equal('soap', ns.prefix)
Source
# File lib/libxml/namespace.rb 53 def to_s 54 if self.prefix 55 "#{self.prefix}:#{self.href}" 56 else 57 self.href 58 end 59 end
Returns the string represenation of a namespace.
Usage:
namespace.to_s