繁体   English   中英

如果第二个文件中包含标签,则使用python合并两个xml文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM