web-dev-qa-db-ja.com

etree要素の属性を削除する方法?

私はいくつかの属性を持つetreeの要素を持っています-どのようにして特定のetree要素の属性を削除できますか?.

38
shahjapan

_.attrib_要素オブジェクトのメンバー には属性の辞書が含まれます-.pop("key")またはdelを使用できます other dict キーと値のペアを削除します。

36
Amber

例:

>>> 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
8
macm

あなたはそれをする必要が無い 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>'
4
A.J.