创建一个连接许多其他文件的 XML 文件



我正在尝试使用一些XML列表创建一个XML。

下面是 XML 的示例列表

java.xml :

<JavaDetails>
   <SomeList> ... </SomeList>
   ....
</JavaDetails>

c.xml

<CDetails>
   <SomeList> ... </SomeList>
   ....
</CDetails>

我想创建一个编程.xml使用上面的XML的

它应该看起来像:

<programming>
 <Java>
   <JavaDetails>
    <SomeList> ... </SomeList>
    ....
   </JavaDetails>
 </Java>
 <C>
  <CDetails>
    <SomeList> ... </SomeList>
   ....
  </CDetails>
 </C>
</programming>

我目前正在研究 nokogiri 做同样的事情 性能是一个主要因素, 我不确定如何为输出XML创建节点。 任何使用 Nokogiri 的 Ruby 代码帮助都非常感谢。

要创建具有特定根目录的新 XML 文件,可以像以下那样简单:

doc = Nokogiri.XML("<programming/>")

向该文档添加子节点的一种方法:

java = doc.root.add_child('<Java/>').first

要从磁盘读取另一个 XML 文件并追加它,请执行以下操作:

java_details = Nokogiri.XML( IO.read )
java << java_details.root

因此,如果您有一个文件名数组,并且您想根据名称从每个文件名构造包装元素:

require 'nokogiri'
files = %w[ java.xml c.xml ]
doc   = Nokogiri.XML('<programming/>')
files.each do |filename|
  wrap_name = File.basename(filename,'.*').capitalize
  wrapper   = doc.root.add_child("<#{wrap_name} />").first
  wrapper   << Nokogiri.XML(IO.read(filename)).root
end
puts doc

或者,如果您想使用 Nokogiri 的构建器界面:

builder = Nokogiri::XML::Builder.new do |xml|
  xml.programming do
    files.each do |filename|
      wrap_name = File.basename(filename,'.*').capitalize
      xml.send(wrap_name) do
        xml.parent << Nokogiri.XML(IO.read(filename)).root
      end
    end
  end
end
puts builder.to_xml

要安装它:

gem install nokogiri
语法

如下:

require 'nokogiri'
builder = Nokogiri::XML::Builder.new do |xml|
  xml.programming {
    xml.Java {
      xml.JavaDetails {
        xml.SomeList 'List item'
      }
    }
  }
end

结果可以通过以下方式检索to_xml

builder.to_xml

哼!

相关内容

  • 没有找到相关文章

最新更新