我需要"合并"两个XML文档,覆盖重叠的属性和元素.例如,如果我有document1:
<mapping>
<key value="assigned">
<a/>
</key>
<whatever attribute="x">
<k/>
<j/>
</whatever>
</mapping>
Run Code Online (Sandbox Code Playgroud)
和文件2:
<mapping>
<key value="identity">
<a/>
<b/>
</key>
</mapping>
Run Code Online (Sandbox Code Playgroud)
我想合并这两个:
<mapping>
<key value="identity">
<a/>
<b/>
</key>
<whatever attribute="x">
<k/>
<j/>
</whatever>
</mapping>
Run Code Online (Sandbox Code Playgroud)
我更喜欢基于Java或XSLT的解决方案,ant会很好,但是如果有一个简单的方法可以在Rake,Ruby或Python中做到这一点请不要害羞:-)
编辑:实际上我发现我宁愿使用自动化工具/脚本,甚至自己编写它,因为手动合并大约30个XML文件有点笨拙...... :-(
我试图使用Python将多个XML文件合并在一起,而不是外部库.XML文件具有嵌套元素.
示例文件1:
<root>
<element1>textA</element1>
<elements>
<nested1>text now</nested1>
</elements>
</root>
Run Code Online (Sandbox Code Playgroud)
示例文件2:
<root>
<element2>textB</element2>
<elements>
<nested1>text after</nested1>
<nested2>new text</nested2>
</elements>
</root>
Run Code Online (Sandbox Code Playgroud)
我想要的是:
<root>
<element1>textA</element1>
<element2>textB</element2>
<elements>
<nested1>text after</nested1>
<nested2>new text</nested2>
</elements>
</root>
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
从这个答案.
from xml.etree import ElementTree as et
def combine_xml(files):
first = None
for filename in files:
data = et.parse(filename).getroot()
if first is None:
first = data
else:
first.extend(data)
if first is not None:
return et.tostring(first)
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
<root>
<element1>textA</element1>
<elements>
<nested1>text now</nested1>
</elements>
<element2>textB</element2>
<elements>
<nested1>text after</nested1>
<nested2>new …Run Code Online (Sandbox Code Playgroud) 我目前正在python脚本中使用xml.dom模块的toprettyxml()函数,我对换行有一些麻烦.如果不使用newl参数或者如果我使用toprettyxml(newl ='\n'),它实际上会显示几行而不是一行.
例如
f = open(filename, 'w')
f.write(dom1.toprettyxml(encoding='UTF-8'))
f.close()
Run Code Online (Sandbox Code Playgroud)
显示:
<params>
<param name="Level" value="#LEVEL#"/>
<param name="Code" value="281"/>
</params>
Run Code Online (Sandbox Code Playgroud)
有谁知道问题的来源以及如何使用它?仅供参考我使用的是Python 2.6.1