2016-11-16 5 views
1

나는 깊은에만 즉 하위의 출력 XML하려는이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 같은 문서가 나는

<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에 새로운 최상위 요소에 추가 된 관련 네임 스페이스 선언 즉 하위이 어떻게 포함되는지 확인하려면 어떻게해야합니까?

답변

2

트릭은 덤핑 전에 노드를 복사하는 것입니다 :

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

xmlCopyNode 복사 된 노드에 필요한 네임 스페이스 선언을 추가합니다.

+0

선생님, 당신은 챔피언입니다. – Waslap