【发布时间】:2015-06-23 17:13:33
【问题描述】:
我有一个带有如下节点的 XML 文件:
<trkpt lat="-37.7944415" lon="144.9616159">
<ele>41.3681107</ele>
<time>2015-04-11T03:52:33.000Z</time>
<speed>3.9598</speed>
</trkpt>
我正在使用 lxml.etree.iterparse() 迭代解析树。我循环遍历每个 trkpt 元素的子节点,并希望打印子节点的文本值。例如
for event, element in etree.iterparse(infile, events=("start", "end")):
if element.tag == NAMESPACE + 'trkpt':
for child in list(element):
print child.text
问题是在这个阶段节点没有文本,所以打印的输出是'None'。
我已通过将“print child.text”语句替换为“print etree.tostring(child)”来验证这一点,输出如下所示
<ele/>
<time/>
<speed/>
根据文档,“请注意,在收到开始事件时,元素的文本、尾部和子项不一定存在。只有结束事件才能保证元素已被完全解析。”
所以我把我的 for 循环改成了这个,注意 'if event == "end":' 语句
for event, element in etree.iterparse(infile, events=("start", "end")):
if element.tag == NAMESPACE + 'trkpt':
if event == "end":
for child in list(element):
print child.text
但我仍然得到相同的结果。任何帮助将不胜感激。
【问题讨论】:
标签: python lxml elementtree iterparse