2014-10-10 121 views
0

這裏是我的示例代碼:找不到標籤

import xml.etree.cElementTree as ET 

g = ET.Element('stuff') 
g.set('foo','bar') 
h = ET.ElementTree(g) 

使用這個配置,這裏發生了什麼:

>>> g.iterfind('stuff') 
<generator object select at 0x10d38fa00> 
>>> _.next() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
StopIteration 

>>> h.iterfind('stuff') 
<generator object select at 0x10d38fa00> 
>>> _.next() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
StopIteration 

我真的寧願不要使用getiterator()並且每次迭代整個樹(儘管我猜iterfind可能會在後臺做這件事)。爲什麼它找不到這個東西?它在我做set之前工作,但不是之後。

+0

確定它在你執行'set'之前是否有效?它不適合我,也不適合。你的'stuff'節點沒有任何名爲'stuff'的後代,所以'iterfind'(或'find',這對於交互式調試來說更容易一點)不會返回任何內容。 – abarnert 2014-10-10 22:03:38

回答

0

在這裏找不到任何東西。您創建了一個沒有子節點的stuff節點,然後向其請求所有節點stuff,其中沒有節點。

它不會在set前工作比後更多:

>>> import xml.etree.cElementTree as ET 
>>> g = ET.Element('stuff') 
>>> print g.find('stuff') 
None 
>>> next(g.iterfind('stuff')) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
StopIteration 

如果你把那下另一個節點,它的作品有或沒有set上任何一個:

>>> f = ET.Element('parent') 
>>> f.append(g) 
>>> print f.find('stuff') 
<Element 'stuff' at 0x10edc5b10> 
>>> f.set('foo', 'bar') 
>>> g.set('foo', 'bar') 
>>> print f.find('stuff') 
<Element 'stuff' at 0x10edc5b10>