编辑:我找到了一种让它工作的方法。原来我有一个elem.clear()
电话,我没有在下面的代码中显示。我为此道歉。我修改了它,所以你可以看到它是怎样的。事实证明,如果我将该调用移到 if 语句中,问题就消失了。但我仍然不明白在 if 语句完成之前如何调用 clear 。
我有一个看起来像这样的 XML 文件:
<alarm> <alarm_id> 127688705 </alarm_id> <site> 1 </site> <event_time> 14/08/31 00:01:00 </event_time> <cease_time> 14/08/31 00:07:00 </cease_time> <problem_text>
Something went wrong </problem_text> </alarm>
我知道它没有正确的样式,但这就是我的脚本接收它的方式,所以我想给你们提供全貌。<alarm>
该文件基本上在一个元素下有数百个<root>
元素。
我想要做的是用 iterparse 解析文件并从<alarm>
. 到目前为止,我的脚本如下所示:
import xml.etree.cElementTree as etree
try:
sourcefile = open('file.xml')
except IOError:
print('Cannot open ', sourcefile)
return -1
for event, elem in etree.iterparse(sourcefile):
if elem.tag == 'alarm':
print("event:", event)
for child in elem:
print(child.tag, child.text)
elem.clear()
但我None
从child.text
. 这是我运行脚本时得到的输出:
[big@bang src]$ ./parse_xml.py
event: end
alarm_id None
site None
event_time None
cease_time None
problem_text None
你们能帮我解决这个问题吗?