使用lxml向现有元素添加属性,删除元素等

时间:2010-07-12 21:58:24

标签: python xml lxml

我使用

解析XML
from lxml import etree

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

现在我想处理解析的XML。我无法删除带有命名空间的元素或只删除一般元素,例如

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

我希望删除整个元素以及标记内的所有内容。我还想为现有元素添加属性。我需要的方法是Element类,但我不知道如何在ElementTree对象中使用它。任何指针肯定会受到赞赏,谢谢

2 个答案:

答案 0 :(得分:14)

您可以通过此调用访问根元素: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'

答案 1 :(得分:1)

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>