2012-12-27 68 views
4

我读过remove示例here,示例here不适用于我。如何使用Python中的ElementTree在xml中删除节点?

我的XML文件中读取:

<A> 
    <B>some text</B> 
    <B>other text</B> 
    <B>more text</B> 
</A> 

我想要做的是从XML中除去第二<B></B>。我不知道它拥有什么文本。但我有<B></B>的索引,比如index = 1,这意味着我想删除第二个元素(或节点)。

我有这样的代码:

F = open('example.xml') 
self.tree = parse(F) 
self.root = self.tree.getroot() 
F.close() 

因此,在这种情况下,我想删除是self.root[1]

这是如何使用ElementTree实现的?

编辑:使我的问题更清晰明确。

回答

5
In [1]: import xml.etree.ElementTree as ET 

In [2]: xmlstr=\ 
    ...: """ 
    ...: <A> 
    ...: <B>some text</B> 
    ...: <B>other text</B> 
    ...: <B>more text</B> 
    ...: </A> 
    ...: """ 

In [3]: tree=ET.fromstring(xmlstr) 

In [4]: tree.remove(tree.findall('.//B')[1]) 
2

你们不是直截了当的。我和答案在这里结合我的知识,并与该出来了:

for i, child in enumerate(self.root): 
    if path == i: 
     self.root.remove(child) 
     break 

其中path是我想删除的项目的索引。

+0

@ elwz - 那怎么比'tree.remove(tree.findall('.// B')[1])'好? – root

+1

我的歉意。它现在工作。只是我对树和根(最初在问题中)感到困惑。我会给你荣誉。 – elwc