我正在尝试使用一些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
哼!