我正在尝试阅读XML文件(configs.xml
)的内容,并将其插入另一个XML文件(workspace.xml
)的中间位置。
这是代码:
require "nokogiri"
workspace = File.open("workspace.xml")
xml = Nokogiri::XML(workspace)
workspace.close
# Add new configs
configs = File.read("configs.xml")
xml.search('component[name="RunManager"]').each do |node|
node.content=configs
end
puts xml
输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidLayoutPreviewToolWindow">
<option name="state">
<GlobalState/>
</option>
</component>
<component name="RunManager" selected="Android Application.Run on device">
<configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
<module name="" />
<option name="TESTING_TYPE" value="0" />
<option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
<option name="METHOD_NAME" value="" />
<option name="CLASS_NAME" value="" />
</configuration>
</component>
<component name="ShelveChangesManager" show_recycled="false"/>
<component name="SliceManager" selected="Android Application.Run on device">
<option name="analysisUIOptions">
<AnalysisUIOptions/>
</option>
</component>
</project>
正如您所看到的,中间插入的内容将所有角括号< >
替换为HTML代码< >
,我不知道为什么,但我怀疑这必须与编码。
最有趣的是,如果单独打印configs.xml
的内容(插入和修改的内容),则输出符合预期:
<configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
<option name="TESTING_TYPE" value="0" />
<option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
<option name="METHOD_NAME" value="" />
// ............
</configuration>
答案 0 :(得分:1)
当您设置节点的内容时,实际上设置了 text 内容,这意味着,Nokogiri会自动将其删除。
要向XML添加节点,您需要使用add_child
configs = File.read("configs.xml")
xml.search('component[name="RunManager"]').each do |node|
node.add_child configs
end