编辑:我找到了一种方法,使其工作。事实证明,我有一个elem.clear()
调用,我没有在下面的代码中显示。我为此道歉。我修改了它,以便你可以看到它是如何。事实证明,如果我在if语句中移动该呼叫,问题就消失了。但我还是不明白在if语句完成之前如何调用clear。iterparse没有得到儿童文字
我有几分,看起来像这样的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>
我知道它没有正确的风格,但是这是我的脚本如何接收它,所以我想过放弃你们的全貌。该文件基本上具有<root>
元素下的数百个<alarm>
元素。
我想要做的就是用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
结果。这是我运行脚本时得到的输出结果:
你们能帮我一个忙吗?
你的代码工作正常我。 'Python 2.7.3'。 – 2014-09-02 18:25:28