如何使用Nokogiri将节点从一个xml文件复制到另一个文件?

时间:2015-03-13 16:53:15

标签: ruby xml nokogiri

我正在尝试执行以下操作:

我有以下xml_1文件,我生成了它。

 
<document>
   <TITLE>Computer Parts</TITLE>
   <header>
      <ITEM>Motherboard</ITEM>
      <MANUFACTURER>ASUS</MANUFACTURER>
      <MODEL>P3B-F</MODEL>
      <COST> 123.00</COST>
   </header>
   <part1>
      <ITEM>Video Card</ITEM>
      <MANUFACTURER>ATI</MANUFACTURER>
      <MODEL>All-in-Wonder Pro</MODEL>
      <COST> 160.00</COST>
   </part1>
   .....
   <part5>
   </part5>
 {HERE I WANT TO ADD NODES FROM OTHER XML FILES}
</document>

因为我正在尝试生成一个大的xml文件,所以我更喜欢将它们分块生成并最终将它们组合在一起。 通过这种方式,我的代码更清晰,更易读。

最后,我想在 xml_1 文件中依次复制xml文件(xml_2,xml_3等)。 所以,假设我有另外一个xml_2文件,如下所示:

<?xml version="1.0"?>
   <part6>
   </part6>
    ...
   <part10>
   </part10>

等等..我可以拥有xml_3 .. xml_n。

我的问题是: 是否可以在ruby文件中使用Nokogiri将一个xml文件的节点复制到另一个?

提前致谢!

1 个答案:

答案 0 :(得分:2)

请参阅Nokogiri::XML::Node#<< to append children

require 'nokogiri'

doc1 = Nokogiri::XML('<doc><foo>Foo</foo></doc>')
doc2 = Nokogiri::XML('<doc><bar>Bar</bar></doc>')
doc3 = Nokogiri::XML('<doc><gah>Gah</gah></doc>')

doc1.root << doc2.root.children # Append doc2's root's children to doc1's root.
doc1.root << doc3.root.children # Append doc3's root's children to doc1's root.

doc1.to_xml # =>
# <doc>
#   <foo>Foo</foo>
#   <bar>Bar</bar>
#   <gah>Gah</gah>
# </doc>

根据文档,您可以附加任何节点,文档片段或节点集,以便您可以以任何您想要的方式选择目标节点(CSS选择器,XPath,DOM等)。