更改节点 libxml2 的命名空间

标签 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);

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

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

最佳答案

xmlXPathEvalExpressionnode 结果并不直接是您期望的 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/

相关文章:

c - 描述一下这个 union 正在发生的事情

c# - 使用 XmlSerializer 序列化 DataType ="time"字段

c# - 将 xml 转换为排序字典

xml - 在 XSD 中添加与 XML 文件无关的属性/标签

python - 为什么 Theano 在 Windows 上比在 Linux 上慢(很多)?

linux - NFS 安装挂起重启

c - C中的OOP,实现和错误

c - fgetc() 创建段错误

c - "extension"中 "Nested functions are supported as an extension in GNU C"的处理是什么?

C 程序在 Mac OSX 和 Linux 上表现不同