如何从 ElementTree 元素中删除属性?

How do I remove an attribute from an ElementTree Element?

我有一个用 xml.etree.ElementTree 创建的简单 XML 对象 <person>

<person name='John' age='21' />

我想修改 XML 元素以删除 age 属性。

<person name='John' />

我可以使用 .get("age"), but using .remove("age") 访问属性导致类型错误。

import xml.etree.ElementTree as ElementTree

xml = ElementTree.Element('person', name="john", age="21")
xml.remove("age") 
# TypeError: remove() argument must be xml.etree.ElementTree.Element, not str

According to the documentation,.remove()只能用来移除子元素。似乎没有任何替代选项可用于删除属性。

如何从 xml.etree.ElementTree 对象中删除 XML 属性?

你可以试试del xml.attrib["age"]

import xml.etree.ElementTree as ElementTree

xml = ElementTree.Element('person', Name="john", age="21")
print(xml.items())
del xml.attrib["age"]
print(xml.items())

将产生:

[('Name', 'john'), ('age', '21')]
[('Name', 'john')]

使用xml.attrib.pop("age").

from xml.etree import ElementTree

xml = ElementTree.Element('person', name="john", age="21")
print(ElementTree.tostring(xml).decode())

xml.attrib.pop("age")
print(ElementTree.tostring(xml).decode())

输出:

<person name='John' age='21' />
<person name='John' />

解释:

ElementTreeattrib 成员作为 dict 对象实现,这意味着您可以在其上使用任何标准字典方法。