My knowledge of C is less than basic (yes, I used Basic a lot as a child).
But, I was able to compile the following and verify that libxml2 is able to clear the namespace, so the problem must lie in the XS land:
#include <stdio.h>
#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
int main (int argc, char **argv) {
xmlInitParser();
xmlDoc *document;
document = xmlParseDoc("<r xmlns:p='http://p.p'><p:a>HERE</p:a></r>"
+);
xmlXPathContext *xpc;
xpc = xmlXPathNewContext(document);
xmlXPathRegisterNs(xpc, "p", "http://p.p");
xmlXPathObject *xp;
xp = xmlXPathEvalExpression("/r/p:a", xpc);
if (xp == NULL) return(1);
xmlNodeSet *nodes;
nodes = xp->nodesetval;
xmlNode *node;
node = nodes->nodeTab[0];
xmlSetNs(node, NULL);
xmlChar *s;
int size;
xmlDocDumpMemory(document, &s, &size);
char *string;
string = (char *)s;
printf("%s", string);
return(0);
}
Outputs:
<?xml version="1.0"?>
<r xmlns:p="http://p.p"><a>HERE</a></r>
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
|