代码之家  ›  专栏  ›  技术社区  ›  shahjapan

如何删除etree元素的属性?

  •  30
  • shahjapan  · 技术社区  · 16 年前

    我的etree元素有一些属性-我们如何删除perticula etree元素的属性。

    3 回复  |  直到 8 年前
        1
  •  30
  •   Amber    16 年前

    这个 .attrib member of the element object 包含属性的指令-您可以使用 .pop("key") del like you would on any other dict 删除密钥val对。

        2
  •  6
  •   macm    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"/>'
    

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

    人们总是建议我们处理异常。

    try:
        del myElement.attrib["myAttr"]
    except KeyError:
        pass
    
        3
  •  3
  •   A.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>'