编辑:我找到了一种让它发挥作用的方法。事实证明我有一个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
你能帮我个忙吗?
答案 0 :(得分:0)
删除return语句,此代码可以正常工作。
答案 1 :(得分:0)
我有同样的问题 - 我的根元素有文本和属性,但子元素没有文本或元素。我原来的代码是:
for _, element in ET.iterparse(file_in): el = shape_element(element) if el: data.append(el) element.clear()
有效且无法清除子元素文本的代码是
for _, element in ET.iterparse(file_in): el = shape_element(element) if el: data.append(el) element.clear()