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

时间:2018-02-08 21:58:25

标签: python xml elementtree

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

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

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

<person name='John' />

我可以使用.get("age")访问该属性,但使用.remove("age")会导致TypeError。

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属性?

2 个答案:

答案 0 :(得分:3)

您可以尝试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')]

答案 1 :(得分:0)

使用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' />

说明:

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