【问题标题】:Adding attributes to existing elements, removing elements, etc with lxml使用 lxml 向现有元素添加属性、删除元素等
【发布时间】:2011-03-15 00:59:20
【问题描述】:

我在 XML 中使用解析

from lxml import etree

tree = etree.parse('test.xml', etree.XMLParser())

现在我想处理已解析的 XML。我在删除带有命名空间的元素或仅删除一般元素时遇到问题,例如

<rdf:description><dc:title>Example</dc:title></rdf:description>

我想删除整个元素以及标签中的所有内容。我还想为现有元素添加属性。我需要的方法在 Element 类中,但我不知道如何在此处使用 ElementTree 对象。任何指针都将不胜感激,谢谢

【问题讨论】:

    标签: python xml lxml


    【解决方案1】:

    您可以通过此调用访问根元素:root=tree.getroot()

    使用该根元素,您可以使用 findall() 并删除符合您条件的元素:

    deleteThese = root.findall("title")
    for element in deleteThese: root.remove(element)
    

    最后,你可以看到你的新树是什么样子的:etree.tostring(root, pretty_print=True)

    以下是有关 find/findall 工作原理的一些信息: http://infohost.nmt.edu/tcc/help/pubs/pylxml/class-ElementTree.html#ElementTree-find

    要为元素添加属性,请尝试以下操作:

    root.attrib['myNewAttribute']='hello world'
    

    【讨论】:

    • 知道如何找到诸如 之类的时髦标签吗?
    • @axsuul 你想好如何添加时髦的标签了吗?
    • @ShreedharManek 对不起,这个项目已经很久了。我不记得了!
    • @axsuul 哈哈,直到评论后我才注意到日期!有人帮我解决了here!
    • 添加属性似乎不起作用。我正在使用 WIN10 并收到以下错误消息: SyntaxError('invalid syntax', ('', 1, 30, "e.attrib['actionableInside'] = False"))
    【解决方案2】:

    remove 方法应该做你想做的事:

    >>> from lxml import etree
    >>> from StringIO import StringIO
    
    >>> s = '<Root><Description><Title>foo</Title></Description></Root>'
    >>> tree = etree.parse(StringIO(s))
    
    >>> print(etree.tostring(tree.getroot()))
    <Root><Description><Title>foo</Title></Description></Root>
    
    >>> title = tree.find('//Title')
    >>> title.getparent().remove(title)
    >>> etree.tostring(tree.getroot())
    '<Root><Description/></Root>'
    
    >>> print(etree.tostring(tree.getroot()))
    <Root><Description/></Root>
    

    【讨论】:

      猜你喜欢
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多