如何删除etree元素的属性?

sha*_*pan 37 python xml lxml elementtree

我有一些属性的元素 - 我们如何删除特定etree元素的属性.

Amb*_*ber 35

.attrib元素对象成员包含属性的字典 - 您可以使用.pop("key")del 喜欢在任何其他字典上删除键 - 值对.

  • 我找到另一个解决方案etree.strip_attrbutes(element,'attribute_name')) (5认同)
  • @shahjapan etree.strip_attrbutes不安全,因为它将使用Element(或ElementTree)及其后代提供的属性名称删除所有属性.http://lxml.de/api/lxml.etree-module.html#strip_attributes (3认同)
  • 虽然 `pop` 有效,但 `del` 不起作用:`AttributeError: 'lxml.etree._Element' 对象的属性 'attrib' 不可写` - 另见 [Element](http://docs.python.org/ library/xml.etree.elementtree.html#element-objects) 文档中提到了类似接口的 dict,但也没有提到 `pop`。 (2认同)

A.J*_*.J. 9

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>'
Run Code Online (Sandbox Code Playgroud)


mac*_*acm 8

示例:

>>> 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"/>'
Run Code Online (Sandbox Code Playgroud)

有时你要小心你没有这个属性:

始终建议我们处理异常.

try:
    del myElement.attrib["myAttr"]
except KeyError:
    pass
Run Code Online (Sandbox Code Playgroud)

  • 如果出现其他问题,只能捕获预期的异常情况会好一些.在这种情况下:除了KeyError: (5认同)