我有这样的文件
<a:root xmlns:a="http://example.com/roots" xmlns:b="http://example.com/subs" xmlns:c="http://example.com/subsubs">
<b:sub>
<c:subsub>Hello World</c:subsub>
</b:sub>
</a:root>
使用xmlNodeDump我想为 sub 输出XML而只是更深层次,即我想最终得到
<b:sub xmlns:b="http://example.com/subs" xmlns:c="http://example.com/subsubs">
<c:subsub>Hellow World<c:subsub>
</b:sub>
但是因为命名空间声明在 root 标记中,所以当我转储XML时,命名空间声明会丢失,我最终会用
<b:sub>
<c:subsub>Hellow World<c:subsub>
</b:sub>
哪个不再有效。问题是:如何确保输出的XML将相关的命名空间声明添加到新的顶级元素,即 sub ?
答案 0 :(得分:3)
诀窍是在转储节点之前复制节点:
xmlNodePtr copy = xmlCopyNode(node, 1);
xmlNodeDump(..., copy, ...);
xmlFreeNode(copy);
xmlCopyNode
将必要的名称空间声明添加到复制的节点。