XML-LibXML
view release on metacpan or search on metacpan
}
else {
return_node = xmlDocCopyNode( node, doc, 1 );
}
}
/* tell all children about the new boss */
if ( node && node->doc != doc ) {
/* if the source document contained psvi, mark the current document as psvi tainted */
if (PmmIsPSVITainted(node->doc))
PmmInvalidatePSVI(doc);
xmlSetTreeDoc(return_node, doc);
}
if ( reconcileNS && doc && return_node
&& return_node->type != XML_ENTITY_REF_NODE ) {
domReconcileNs(return_node);
}
return return_node;
}
/**
* Name: domName
* Synopsis: string = domName( node );
*
* domName returns the full name for the current node.
* If the node belongs to a namespace it returns the prefix and
* the local name. otherwise only the local name is returned.
**/
xmlChar*
domName(xmlNodePtr node) {
const xmlChar *prefix = NULL;
const xmlChar *name = NULL;
xmlChar *qname = NULL;
if ( node == NULL ) {
return NULL;
}
switch ( node->type ) {
case XML_XINCLUDE_START :
case XML_XINCLUDE_END :
case XML_ENTITY_REF_NODE :
case XML_ENTITY_NODE :
case XML_DTD_NODE :
case XML_ENTITY_DECL :
case XML_DOCUMENT_TYPE_NODE :
case XML_PI_NODE :
case XML_NOTATION_NODE :
case XML_NAMESPACE_DECL :
name = node->name;
break;
case XML_COMMENT_NODE :
name = (const xmlChar *) "#comment";
break;
case XML_CDATA_SECTION_NODE :
name = (const xmlChar *) "#cdata-section";
break;
case XML_TEXT_NODE :
name = (const xmlChar *) "#text";
break;
case XML_DOCUMENT_NODE :
case XML_HTML_DOCUMENT_NODE :
case XML_DOCB_DOCUMENT_NODE :
name = (const xmlChar *) "#document";
break;
case XML_DOCUMENT_FRAG_NODE :
name = (const xmlChar *) "#document-fragment";
break;
case XML_ELEMENT_NODE :
case XML_ATTRIBUTE_NODE :
if ( node->ns != NULL ) {
prefix = node->ns->prefix;
}
name = node->name;
break;
case XML_ELEMENT_DECL :
prefix = ((xmlElementPtr) node)->prefix;
name = node->name;
break;
case XML_ATTRIBUTE_DECL :
prefix = ((xmlAttributePtr) node)->prefix;
name = node->name;
break;
}
if ( prefix != NULL ) {
qname = xmlStrdup( prefix );
qname = xmlStrcat( qname , (const xmlChar *) ":" );
qname = xmlStrcat( qname , name );
}
else {
qname = xmlStrdup( name );
}
return qname;
}
/**
* Name: domAppendChild
* Synopsis: xmlNodePtr domAppendChild( xmlNodePtr par, xmlNodePtr newCld );
* @par: the node to append to
* @newCld: the node to append
*
* Returns newCld on success otherwise NULL
* The function will unbind newCld first if nesseccary. As well the
* function will fail, if par or newCld is a Attribute Node OR if newCld
* is a parent of par.
*
* If newCld belongs to a different DOM the node will be imported
( run in 1.591 second using v1.01-cache-2.11-cpan-39bf76dae61 )