假设我们有以下xml文件:
file1.xml:
<main>
<tag1 name="name1">
<t1>text1</t1>
<t2></t2>
<t3></t3>
<t4></t4>
<t5>text5</t5>
<t6>text6</t6>
</tag1>
</main>
file2.xml:
<main>
<tag1 name="name1">
<t1>text1</t1>
<t2></t2>
<t3></t3>
<t4>text4</t4>
<t5>text5</t5>
<t6>text6</t6>
<t7>text7</t7>
<t8></t8>
</tag1>
</main>
对于file1和file2中具有相同名称属性的每个tag1标记,我想生成第三个文件,其中包含file1的所有tx标记以及file2中不在file1中的tx标记,还加上textx内容file2而不是file1,即使两者都存在相应的tx标签。我想用python做这个。请查看下面的file_out.xml以便更好地理解
file_out.xml:
<main>
<tag1 name="name1">
<t1>text1</t1>
<t2></t2>
<t3></t3>
<t4>text4</t4>
<t5>text5</t5>
<t6>text6</t6>
<t7>text7</t7>
<t8></t8>
</tag1>
</main>
答案 0 :(得分:0)
我已经解决了这个问题,我提出的问题没有任何代码片段,因为我是XML解析和Python的新手。请注意,在我放的XML示例中,tag1实际上是游戏,所以这就是我解决它的方法:
import xml.etree.ElementTree as ET
import sys, os
file1_path = sys.argv[1]
file2_path = sys.argv[2]
file_out_path = sys.argv[3]
if os.path.exists(file_out_path):
os.remove(file_out_path)
tree1 = ET.parse(file1_path)
root1 = tree1.getroot()
tree2 = ET.parse(file2_path)
root2 = tree2.getroot()
for game2 in root2.iter ('game'):
name2 = game2.get('name')
found = False
for game1 in root1.iter ('game'):
name1 = game1.get('name')
if name1 == name2:
found = True
break
if not found:
root1.append(game2)
#######################
for game1 in root1.iter ('game'):
name1 = game1.get('name')
for game2 in root2.iter('game'):
name2 = game2.get('name')
if name1 == name2:
for tag2 in game2:
tag1 = game1.find(tag2.tag)
if tag1 is None:
game1.append(tag2)
else:
if (tag1.text is None) or (tag1.text is " ") or (tag1.text is ""):
tag1.text = tag2.text
################################
tree1.write(file_out_path, method='html')
sys.exit(0)