/*
* call-seq:
* add_namespace_definition(prefix, href)
*
* Adds a namespace definition with +prefix+ using +href+ value. The result is
* as if parsed XML for this node had included an attribute
* 'xmlns:prefix=value'. A default namespace for this node ("xmlns=") can be
* added by passing 'nil' for prefix. Namespaces added this way will not
* show up in #attributes, but they will be included as an xmlns attribute
* when the node is serialized to XML.
*/
static VALUE add_namespace_definition(VALUE self, VALUE prefix, VALUE href)
{
xmlNodePtr node, namespacee;
xmlNsPtr ns;
Data_Get_Struct(self, xmlNode, node);
namespacee = node ;
ns = xmlSearchNs(
node->doc,
node,
(const xmlChar *)(NIL_P(prefix) ? NULL : StringValuePtr(prefix))
);
if(!ns) {
if (node->type != XML_ELEMENT_NODE) {
namespacee = node->parent;
}
ns = xmlNewNs(
namespacee,
(const xmlChar *)StringValuePtr(href),
(const xmlChar *)(NIL_P(prefix) ? NULL : StringValuePtr(prefix))
);
}
if (!ns) return Qnil ;
if(NIL_P(prefix) || node != namespacee) xmlSetNs(node, ns);
return Nokogiri_wrap_xml_namespace(node->doc, ns);
}