Как скопировать определенный блок записи XML из файла XML, используя Python? - PullRequest
0 голосов
/ 07 января 2020

Я хотел бы получить помощь в извлечении определенного блока файла XML из файла XML и копировании его в другой файл, используя Python 3.8. Я перепробовал все ответы на подобные вопросы. К сожалению, я не смог этого сделать. Любая помощь будет принята с благодарностью.

Образец XML Файл

<?xml version="1.0" encoding="utf-8"?>
<bookstores>
   <bookstore>
        <book category="cooking">
            <title lang="en">Everyday Italian</title>
            <author>Giada De Laurentiis</author>
            <year>2005</year>
            <price>30.00</price>
        </book>
        <miscellaneous id="1000611004" />
   </bookstore>
   <bookstore>
        <book category="children">
            <title lang="en">Harry Potter</title>
            <author>J K. Rowling</author>
            <year>2005</year>
            <price>29.99</price>
        </book>
        <miscellaneous id="1000611067" />
    </bookstore>
    <bookstore>
        <book category="children">
            <title lang="en">Harry Potter</title>
            <author>J K. Rowling</author>
            <year>2005</year>
            <price>29.99</price>
        </book>
        <miscellaneous id="3450611067" />
    </bookstore>
</bookstores>

Образец Python Сценарий

Здесь я проверяю, совпадают ли элементы в списке orderIds с атрибутом id разное . При совпадении весь блок XML необходимо скопировать в другой файл.

orderIds = ["1000611004", "1000611067"]

mytree = ET.parse(xmlFile)
myroot = mytree.getroot()

for x in myroot.iter():
    if(x.tag == 'miscellaneous'):
        attribute = x.attrib
        idToCheck = attribute['id']
        for id in orderIds:
            if(id == idToCheck):
                --Confused Part To Be Filled--

Ожидаемый вывод

<bookstore>
    <book category="cooking">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <miscellaneous id="1000611004" />
</bookstore>
<bookstore>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <miscellaneous id="1000611067" />
</bookstore>

1 Ответ

1 голос
/ 07 января 2020

Вы можете попробовать:

tree = ET.parse('xmlfile')
root = tree.getroot()
orderIds = ["1000611004", "1000611067"]
bookstore_nodes = root.findall('.//bookstore')
with open('output.xml', 'w') as f:
    for bn in bookstore_nodes:
        misc_node = bn.findall('.//miscellaneous')
        if len(misc_node) > 0 and misc_node[0].attrib['id'] in orderIds:
            f.write(ET.tostring(bn).decode('utf-8'))
...