更改节点libxml2的名称空间

时间:2015-05-07 16:06:36

标签: c xml linux namespaces libxml2

我想在xml中更改节点的命名空间。

doc = novi_xml_getdoc(doc_name);
if(doc==NULL){
    return -1;
}

sprintf(buff, "//%s:capable-switch",ofprefix[ofconfig_version]);
node = xmlXPathEvalExpression(xpath, context)
if(node == NULL){
    return -1;
}
xmlNsPtr ns = xmlNewNs(node,"new-namespace", "prefix");
xmlSetNs(node, ns);

xmlSaveFormatFile (doc_name, doc, 1);
xmlFreeDoc(doc);

但这不会改变节点的命名空间。命名空间保持不变。我看到了几个例子,但都与改变childnode的命名空间有关。

此外,我想如果我们可以通过其他方式修改节点,例如删除并再次创建它,它将起作用。但不知道如何将此节点与其子节点链接。

1 个答案:

答案 0 :(得分:1)

node的{​​{1}}结果不是您期望的xmlXPathEvalExpression,而是xmlNodePtr

http://www.xmlsoft.org/html/libxml-xpath.html#xmlXPathObject

您需要深入到xmlXPathObjectPtr以获得表达式的第一个命中。对node->nodesetval->nodeTab[0]进行NULL测试也很好,检查node->nodesetval有多少次点击等等。