我不明白发生了什么事? 我有 xml.etree.ElementTree.Element 对象,其代表如下:
<root>
<tag1>some text</tag1>
<l1>text</l1>
<l2>text</l2>
</root>
我想删除<tag1>...</tag1>
子元素。 etree_collection 是包含ElementTree.Element对象的OrderedDict。
for etree in etree_collection.values():
tag1 = etree.iter('tag1')
etree.remove(tag1)
此代码产生ValueError: list.remove(x): x not in list
错误。
这里有什么问题?
答案 0 :(得分:2)
etree.iter('tag1')
返回ElementDepthFirstIterator
:
In [175]: etree.iter('tag1')
Out[175]: <lxml.etree.ElementDepthFirstIterator at 0x7f43736a61e0>
您必须遍历迭代器中的项目以获取<tag1>
Elements
:
In [176]: list(etree.iter('tag1'))
Out[176]: [<Element tag1 at 0x7f4373698ef0>]
相反,您可以使用find
获取<tag1>
中的第一个Element
etree
:
In [177]: etree.find('tag1')
Out[177]: <Element tag1 at 0x7f4373698ef0>
因此,使用find
可能会使用以下内容:
for elt in etree_collection.values():
tag1 = elt.find('tag1')
elt.remove(tag1)
(我将etree
更改为elt
,因为etree
提醒我太多的模块xml.etree
。)
如果<tag1>
中可以有多个Element
elt
,那么您可以使用
for elt in etree_collection.values():
for tag1 in elt.iter('tag1'):
elt.remove(tag1)