【问题标题】:Merging two xml files with python if a tag is contained on a second file如果标签包含在第二个文件中,则将两个 xml 文件与 python 合并
【发布时间】:2015-04-11 21:11:14
【问题描述】:

假设我们有以下 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>

【问题讨论】:

  • Thisthis 可能会对您有所帮助。
  • 嗨,Anzel,我已经解决了。感谢您的评论。我已经发布了答案。

标签: python xml merge


【解决方案1】:

我已经解决了这个问题,我在没有任何代码 sn-p 的情况下提出这个问题,因为我是 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多