我想更改 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);
但这并不会改变节点的命名空间。命名空间保持不变。我看到了几个示例,但所有示例都与更改子节点的命名空间有关。
此外,我想如果我们可以通过其他方式修改节点,例如删除并重新创建它,它会起作用。但不是不知道如何将该节点与其子节点链接起来。
最佳答案
xmlXPathEvalExpression
的 node
结果并不直接是您期望的 xmlNodePtr
,它是一个 xmlXPathObjectPtr
.
http://www.xmlsoft.org/html/libxml-xpath.html#xmlXPathObject
您需要深入到 node->nodesetval->nodeTab[0]
以获取表达式的第一个命中。测试 node->nodesetval
是否为 NULL 也很好,检查 node->nodesetval->nodeNr
有多少次点击,等等。
关于更改节点 libxml2 的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30106344/