如何在 Python 中深度复制 xml 子元素
How to deepcopy a xml sub element in Python
我对 XML 和 Python 非常陌生,无法将本网站和其他网站的帖子整合在一起。我正在尝试使用 ElementTree 深度复制一个元素并附加到另一个元素。从下面的输入 table 开始:
<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")
这是复制 <Identifier>
元素并附加到 <Dependent>
元素的输出:
<Company>
<Identifier>Benesolv</Identifier>
<Employee>
<EESSN>111111111</EESSN>
<Dependent>
<SSN>222222222</SSN>
<Identifier>Benesolv</Identifier>
</Dependent>
</Employee>
</Company>
我想做的是复制 <EESSN>
元素并附加到 <Dependent>
元素,但我不知道如何做。我认为我只是将 root[0]
替换为可以识别 <EESSN>
元素的内容,但我尝试过的所有方法都不起作用。感谢您的帮助。
期望的输出:
<Company>
<Identifier>Benesolv</Identifier>
<Employee>
<EESSN>111111111</EESSN>
<Dependent>
<SSN>222222222</SSN>
<EESSN>111111111</EESSN>
</Dependent>
</Employee>
</Company>
你不需要深度复制任何东西;只需将 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>
我对 XML 和 Python 非常陌生,无法将本网站和其他网站的帖子整合在一起。我正在尝试使用 ElementTree 深度复制一个元素并附加到另一个元素。从下面的输入 table 开始:
<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")
这是复制 <Identifier>
元素并附加到 <Dependent>
元素的输出:
<Company>
<Identifier>Benesolv</Identifier>
<Employee>
<EESSN>111111111</EESSN>
<Dependent>
<SSN>222222222</SSN>
<Identifier>Benesolv</Identifier>
</Dependent>
</Employee>
</Company>
我想做的是复制 <EESSN>
元素并附加到 <Dependent>
元素,但我不知道如何做。我认为我只是将 root[0]
替换为可以识别 <EESSN>
元素的内容,但我尝试过的所有方法都不起作用。感谢您的帮助。
期望的输出:
<Company>
<Identifier>Benesolv</Identifier>
<Employee>
<EESSN>111111111</EESSN>
<Dependent>
<SSN>222222222</SSN>
<EESSN>111111111</EESSN>
</Dependent>
</Employee>
</Company>
你不需要深度复制任何东西;只需将 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>