【问题标题】:How to deepcopy a xml sub element in Python如何在 Python 中深度复制 xml 子元素
【发布时间】:2019-02-22 00:35:16
【问题描述】:

我对 XML 和 Python 非常陌生,并且将本网站和其他网站上的帖子放在一起。我正在尝试使用 ElementTree 深度复制一个元素并附加到另一个元素。从下面的输入表开始:

<Company>
    <Identifier>Benesolv</Identifier>
    <Employee>
        <EESSN>111111111</EESSN>
        <Dependent>
            <SSN>222222222</SSN>
        </Dependent>
    </Employee>
</Company>

这是我拥有的代码,但不是我最终想要的。

import xml.etree.ElementTree as ET
import copy

tree = ET.parse("file.xml")
root = tree.getroot()

x = copy.deepcopy(root[0])
for elem in tree.findall("Company/Employee/Dependent"):
    elem.append(copy.deepcopy(x))

tree.write("file.xml")

这是复制&lt;Identifier&gt; 元素并附加到&lt;Dependent&gt; 元素的输出:

<Company>
    <Identifier>Benesolv</Identifier>
    <Employee>
        <EESSN>111111111</EESSN>
        <Dependent>
            <SSN>222222222</SSN>
        <Identifier>Benesolv</Identifier>
    </Dependent>
    </Employee>
</Company>

我想要做的是复制&lt;EESSN&gt; 元素并附加到&lt;Dependent&gt; 元素,但我不知道如何。我想我只是将root[0] 替换为可以识别&lt;EESSN&gt; 元素的东西,但是我尝试过的一切都不起作用。感谢您的帮助。

期望的输出:

<Company>
    <Identifier>Benesolv</Identifier>
    <Employee>
        <EESSN>111111111</EESSN>
        <Dependent>
            <SSN>222222222</SSN>
        <EESSN>111111111</EESSN>
        </Dependent>
    </Employee>
</Company>

【问题讨论】:

    标签: python xml element deep-copy


    【解决方案1】:

    你不应该需要深拷贝任何东西;只需将EESSN 元素分配给一个变量,然后将append 分配给Dependent

    XML 输入

    <Company>
        <Identifier>Benesolv</Identifier>
        <Employee>
            <EESSN>111111111</EESSN>
            <Dependent>
                <SSN>222222222</SSN>
            </Dependent>
        </Employee>
    </Company>
    

    Python 代码

    import xml.etree.ElementTree as ET
    
    tree = ET.parse("input.xml")
    
    for employee in tree.findall("Employee"):
        eessn = employee.find("EESSN")
        for dependent in employee.findall("Dependent"):
            dependent.append(eessn)
    
    tree.write("output.xml")
    

    XML 输出

    <Company>
        <Identifier>Benesolv</Identifier>
        <Employee>
            <EESSN>111111111</EESSN>
            <Dependent>
                <SSN>222222222</SSN>
                <EESSN>111111111</EESSN>
            </Dependent>
        </Employee>
    </Company>
    

    【讨论】:

    • 谢谢丹尼尔!!巨大的帮助。我相信这也回答了我之前帖子中的所有问题。救了我的人。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2015-05-31
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多