首页 > 解决方案 > 如何不加载整个文档,而是逐行加载 - xml,python,使用 xml.etree.ElementTree

问题描述

我使用了 xml.etree.ElementTree 库,“for”循环,理论上应该逐行读取。

不幸的是,这可能不是,因为在执行脚本后它会收到消息'Killed',所以脚本不会逐行读取。任何人都可以帮助我,提出一些建议。

我是初学者。

这是我的代码:

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) ```

标签: pythonxmlelementtreexml.etree

解决方案


我对您的代码有以下评论:

  1. dom = ElementTree.parse(full_file)读取整个输入文件(不是逐行)。

  2. 您的 2 个嵌套循环:

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

    可以用一个循环替换:

    for category in root.findall('offer/category'):
    
  3. 写入更新的dom树的指令应该第一个for循环之外(删除它的缩进)。

  4. 最后,可能是您的代码失败的基本原因是输出文件名应该用引号引起来,因此将其更改为dom.write('output.xml'). 否则会出现执行错误。


推荐阅读