![](/img/trans.png)
[英]merging two xml files and appending elements for similar elements and moving elements that aren't present in one file in python
[英]Merging two xml files with python if a tag is contained on a second file
假设我们有以下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>
对于文件1和文件2中具有相同名称属性的每个tag1标签,我想生成第三个文件,其中包含文件1的所有tx标签以及文件2中且不在文件1中的tx标签,以及文本2而不是文件2中的textx内容即使在两个文件上都存在相应的tx标签,也要在file1上。 我想使用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>
我已经解决了这个问题,我没有任何代码片段就提出了问题,因为我是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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.