任務是 - 在通過xml樹進行迭代時刪除'當前'節點,保存xml文檔並將其提供給第三方應用程序。根據結果將此節點返回到樹或者忘記它。lxml的etree迭代器的奇怪行爲
讓我展示了怪胎:
<test>
<A>
<A1>
<A2>A2</A2>
</A1>
</A>
<B>
<B1>B1</B1>
</B>
<C>C</C>
</test>
這裏的Python代碼:
from lxml import etree as ET
tree = ET.parse('t.xml')
delete = False
def print_tree():
print '*' * 5
for node in tree.getiterator():
print node.tag
print '*' * 5
print_tree()
for node in tree.getiterator():
#delete the first node (<A> in our case)
if not delete:
try:
node.getparent().remove(node)
delete = True
except:
pass
print '* ' + node.tag
print_tree()
輸出將是這樣的:
*****
test
A
A1
A2
B
B1
C
***** <-- these are all elements iterator can reach
* test
* A
* A1
* A2
*****
test
B
B1
C
*****
正如你可以刪除後見迭代器的節點只進入A分支。
我該如何使它覆蓋樹的其餘部分?我會欣賞一個更優雅的解決方案。
您的xml非常大嗎?我認爲它不建議在迭代時嘗試更改xml的結構。 –