Как загрузить не весь документ, а построчно - xml, python, используя xml .etree.ElementTree - PullRequest
0 голосов
/ 10 февраля 2020

Я использовал библиотеку xml .etree.ElementTree, 'для' l oop и должен теоретически читать строку за строкой.

К сожалению, это, вероятно, не так, потому что после выполнения скрипта он получает сообщение «Убит», поэтому скрипт не читает построчно. Кто-нибудь может мне помочь, предложить что-нибудь.

Я новичок.

Это мой код:

from xml.etree import ElementTree

file_name = 'input.xml'
full_file = os.path.abspath(os.path.join('data', file_name))

dom = ElementTree.parse(full_file)
root = dom.getroot()

for offer in root.findall('offer'):
    for category in offer.findall('category'):
        if category.text == 'f':
            a = ElementTree.SubElement(offer, 'freedelivery')
            a.text = 'true'
    dom.write(output.xml) ```

1 Ответ

0 голосов
/ 10 февраля 2020

У меня есть следующие замечания относительно вашего кода:

  1. dom = ElementTree.parse(full_file) читает входной файл целом (не построчно).

  2. Ваши 2 вложенных цикла:

    for offer in root.findall('offer'):
        for category in offer.findall('category'):
    

    могут быть заменены одинарными l oop:

    for category in root.findall('offer/category'):
    
  3. Инструкция по написанию обновленного дерева dom должно быть снаружи первого для l oop (удалить его отступ).

  4. И последняя, ​​вероятно, основная c причина, по которой ваш код не удался, заключается в том, что имя выходного файла должно быть в кавычках , поэтому измените его на dom.write('output.xml'). В противном случае произойдет ошибка выполнения.

...