2016-11-16 47 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