如何删除etree元素的属性?

53 投票
3 回答
45321 浏览
提问于 2025-04-15 22:04

我有一个etree的元素,它有一些属性——我该怎么做才能删除这个元素的某个特定属性呢?

3 个回答

10

示例:

>>> from lxml import etree 
>>> from lxml.builder import E
>>> otree = E.div()
>>> otree.set("id","123")
>>> otree.set("data","321")
>>> etree.tostring(otree)
'<div id="123" data="321"/>'
>>> del otree.attrib["data"]
>>> etree.tostring(otree)
'<div id="123"/>'

要注意,有时候你可能没有这个属性:

通常建议我们要处理异常情况。

try:
    del myElement.attrib["myAttr"]
except KeyError:
    pass
14

当你想要删除一个不存在的键时,其实不需要使用 try/except 这种方式来处理错误。下面是你可以这样做的示例。

代码

import xml.etree.ElementTree as ET

tree = ET.parse(file_path)
root = tree.getroot()      

print(root.attrib)  # {'xyz': '123'}

root.attrib.pop("xyz", None)  # None is to not raise an exception if xyz does not exist

print(root.attrib)  # {}

ET.tostring(root)
'<urlset> <url> <changefreq>daily</changefreq> <loc>http://www.example.com</loc></url></urlset>'
52

元素对象的 .attrib 成员 包含了一个属性字典。你可以像在其他字典中一样,使用 .pop("key") 或者 del 来删除一个键值对。

撰写回答