2014-11-25 1 views
0

문서에서 가져온 XML 노드를 독립 실행 형 문서로 직렬화하려면 어떻게해야합니까? node.to_xml을 사용하면 충분하지 않습니다. 왜냐하면 to_xml은 노드 내에서 명시 적으로 선언 된 노드들만 필요한 모든 출력을 이 출력하지 않기 때문입니다.XML 노드를 올바른 네임 스페이스의 문서로 serialize

예를 들어, 나는 doc

<wrapper xmlns="ns" xmlns:extra="extra"> 
    <record xml:id="r1"> 
     <field>aaa</field> 
     <field extra:type="second">bbb</field> 
    </record> 
</wrapper> 

에서이 XML 문서를 가지고 있고 노드 #r1를 분리에 나는 원한다.

record = doc.at("//*[@xml:id='r1']") 

이제 record.to_xml 반환

<record xml:id="r1"> 
    <field>aaa</field> 
    <field extra:type="second">bbb</field> 
</record> 

이 결과가 어떤 상황에서 확인 할 수있다 (포맷),하지만 내 목적을 위해 좋지 않다 : 기본 네임 스페이스와 extra 네임 스페이스는 없었다 이 복사되었습니다. 내가 원하는 다음과 같이, 모든 필요한 네임 스페이스가 복사 된 있는 문서입니다 :

<record xml:id="r1" xmlns="ns" xmlns:extra="extra"> 
    <field>aaa</field> 
    <field extra:type="second">bbb</field> 
</record> 

가 어떻게 노코 기리와 함께이 작업을 수행 할 수 있습니까?

답변

0

Nokogiri bug report #1200에서 나온 솔루션은 노드를 사용하기 전에 clone입니다.

은 사용하는 대신

record.to_xml 

record.clone.to_xml 

올바른 XML 문서를 생성합니다.