将XML节点序列化为具有正确名称空间的文档

时间:2014-11-25 18:32:22

标签: ruby xml namespaces nokogiri

如何将从文档中获取的XML节点序列化为独立的节点 文献?使用node.to_xml是不够的,因为to_xml没有 输出所有需要的命名空间,只输出那些显式声明的命名空间 那个节点。

例如,我在doc

中有这个XML文档
 <wrapper xmlns="ns" xmlns:extra="extra">
     <record xml:id="r1">
         <field>aaa</field>
         <field extra:type="second">bbb</field>
     </record>
 </wrapper>

我想隔离节点#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>

我怎么能用Nokogiri做到这一点?

1 个答案:

答案 0 :(得分:0)

Nokogiri bug report #1200出现的解决方案在使用之前是clone节点。

使用

record.clone.to_xml

而不是

record.to_xml

生成正确的XML文档。