2016-11-16 38 views
1

我有这样libxml2的输出空间声明

<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文档我要输出XML为更深只即我想

<b:sub xmlns:b="http://example.com/subs" xmlns:c="http://example.com/subsubs"> 
    <c:subsub>Hellow World<c:subsub> 
</b:sub> 
落得

但是因为命名空间声明在标签,当我转储XML,命名空间声明都将丢失,我结束了

<b:sub> 
    <c:subsub>Hellow World<c:subsub> 
</b:sub> 

这不再有效。问题是:如何确保正在输出的XML具有添加到新顶级元素的相关名称空间声明,即sub

回答

2

诀窍是为之倾倒之前的节点复制:

xmlNodePtr copy = xmlCopyNode(node, 1); 
xmlNodeDump(..., copy, ...); 
xmlFreeNode(copy); 

xmlCopyNode添加必要的命名空间声明复制节点。

+0

先生,你是冠军。 – Waslap