Как глубоко копировать подэлемент xml в Python - PullRequest
0 голосов
/ 22 февраля 2019

Я очень новичок в 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")

Вот вывод, который копируетЭлемент <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>

1 Ответ

0 голосов
/ 22 февраля 2019

Вам не нужно ничего копировать;просто присвойте элемент EESSN переменной и добавьте его к 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>
...