【问题标题】:Refreshing a file in Python's ElementTree刷新 Python 的 ElementTree 中的文件
【发布时间】:2016-12-01 00:27:25
【问题描述】:

我一直在使用 python 的 xml.etree.ElementTree 库,主要是在玩它。但是,我注意到 python 似乎将文件加载到内存中并在那里编辑它,然后刷新它,并继续使用未编辑的版本。 例如,如果我的程序将一个元素添加到一个 XML 文件,然后遍历该 XML 文件,它将看不到它之前所做的添加。

这是我的代码的精简版:

用于添加到文件中:

import xml.etree.ElementTree as ET
tree = et.parse("file.xml")
root = tree.getroot()
newel = ET.Element("element", tag=foo, )
newel.text = bar
root.append(newel)
tree.write("file.xml")
for child in root:
        if child.get("tag") == foo:
            print(child.text)

我是不是做错了什么,或者什么是“刷新”程序中的 XML 文件的好方法,所以当我使用 for 循环遍历程序时,我可以看到我的新元素?

我正在使用 python 3.5。

【问题讨论】:

  • 我见过this,但似乎不适用。

标签: python xml python-3.x elementtree


【解决方案1】:

这与刷新或冲洗无关。 Element 构造函数的签名是:

    __init__(self, tag, attrib={}, **extra)

除了隐式指定为"element" 之外,您还将tag 作为命名参数传入。假设您希望 tag 成为元素属性(基于您尝试使用 Element.get 检索它的方式),以下应该可以工作(有一些额外的更正):

foo = "foo"
bar = "bar"

import xml.etree.ElementTree as ET
tree = ET.parse("file.xml")
root = tree.getroot()
newel = ET.Element("element", {"tag": foo})
newel.text = bar
root.append(newel)
tree.write("file.xml")
for child in root:
        if child.get("tag") == foo:
            print(child.text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多