我正在尝试使用一些XML列表来创建XML。
这是XML的
的示例列表<JavaDetails>
<SomeList> ... </SomeList>
....
</JavaDetails>
<CDetails>
<SomeList> ... </SomeList>
....
</CDetails>
我想使用上面的XML
创建一个Programming.xml应该看起来像:
<programming>
<Java>
<JavaDetails>
<SomeList> ... </SomeList>
....
</JavaDetails>
</Java>
<C>
<CDetails>
<SomeList> ... </SomeList>
....
</CDetails>
</C>
</programming>
我目前正在研究nokogiri做同样的事情,性能是一个主要因素,我不确定如何为输出XML创建节点。使用Nokogiri的Ruby中的任何代码帮助都非常感谢。
答案 0 :(得分:2)
要创建具有特定根的新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界面:
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
答案 1 :(得分:0)
安装它:
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
HTH!