如何使用ElementTree从Python中的XML文档中删除节点

如何使用ElementTree从Python中的XML文档中删除节点,python,elementtree,Python,Elementtree,结构如下: <foo> <bar> <buildCommand> <name>com.android.ide.eclipse.adt.ApkBuilder</name> <arguments> </arguments> </buildCommand> <buildCommand>

结构如下:

   <foo>
        <bar> 
    <buildCommand>
        <name>com.android.ide.eclipse.adt.ApkBuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
        <triggers>auto,full,incremental,</triggers>
    </buildCommand>
        </bar>
   </foo>
Python 2.7.1有remove命令,但我在remove上遇到一个错误:

文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py”,删除中第337行 self.\u子项。删除(元素) ValueError:list。删除(x):x不在列表中

更新:

*由@martijn pieters解决-第二个for循环的正确逻辑为

for tag in removeList:
   parent = root.find('bar')
   parent.remove(tag)

您需要从其父元素中删除该元素;不过,您需要直接获取对父对象的引用,因为没有从子对象备份的路径。在这种情况下,您必须在查找
元素的同时获得对
元素的引用


尝试从根目录中删除标记失败,因为标记不是根目录的直接子目录。

谢谢!更新问题以显示您的答案。这是进行这种“XML编辑”的最具python风格的方法吗?还是我应该使用另一种方法,比如构建一个并行文档并排除该节点?我会转而使用
lxml
;它支持相同的API,但添加了更好的XPath支持以及对节点父节点的访问。我现在还没有选择lxml路线,因为我在Mac OSX 10.7上,它也没有lxml-不过,这里有一些想法供那些希望在该平台上使用lxml的人参考:我在Mac上,一直使用
lxml
。-)
for tag in removeList:
   parent = root.find('bar')
   parent.remove(tag)