gpt4 book ai didi

ruby - 创建一个加入许多其他文件的 XML 文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:17 25 4
gpt4 key购买 nike

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

这是一个 XML 的示例列表

java.xml :

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

c.xml

<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 代码帮助。

最佳答案

要创建一个具有特定根的新 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

关于ruby - 创建一个加入许多其他文件的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com