非根元素中的 libxml2 输出命名空间声明
libxml2 output namespace declarations in non-root elements
我有这样的文档
<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 ?
诀窍是在转储之前复制节点:
xmlNodePtr copy = xmlCopyNode(node, 1);
xmlNodeDump(..., copy, ...);
xmlFreeNode(copy);
xmlCopyNode
将必要的命名空间声明添加到复制的节点。
我有这样的文档
<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 ?
诀窍是在转储之前复制节点:
xmlNodePtr copy = xmlCopyNode(node, 1);
xmlNodeDump(..., copy, ...);
xmlFreeNode(copy);
xmlCopyNode
将必要的命名空间声明添加到复制的节点。