我正在使用Python的ElementTree来解析xml文件。我有一个“findall”来查找所有“修订版”子元素,但是当我遍历结果时,它们不是文档顺序。我能做错什么?
这是我的代码:
allrevisions = page.findall('{http://www.mediawiki.org/xml/export-0.5/}revision')
for rev in allrevisions:
print rev
print rev.find('{http://www.mediawiki.org/xml/export-0.5/}timestamp').text
这是我正在解析的文档的链接:http://pastie.org/2780983
谢谢, BSG
-Oops。通过我的代码并逐个运行它,我解决了问题 - 我在错误的地方的元素列表中陷入了反向(),这导致了所有的麻烦。非常感谢你的帮助 - 对不起,这是一个如此愚蠢的问题。
答案 0 :(得分:1)
The documentation for ElementTree表示findall
按文档顺序返回元素。
快速测试显示正确的行为:
import xml.etree.ElementTree as et
xmltext = """
<root>
<number>1</number>
<number>2</number>
<number>3</number>
<number>4</number>
</root>
"""
tree = et.fromstring(xmltext)
for number in tree.findall('number'):
print number.text
<强>结果:强>
1 2 3 4
查看要解析的文档会很有帮助。
<强>更新强>
使用您提供的源数据:
from __future__ import with_statement
import xml.etree.ElementTree as et
with open('xmldata.xml', 'r') as f:
xmldata = f.read()
tree = et.fromstring(xmldata)
for revision in tree.findall('.//{http://www.mediawiki.org/xml/export-0.5/}revision'):
print revision.find('{http://www.mediawiki.org/xml/export-0.5/}text').text[0:10].encode('utf8')
<强>结果:强>
‘The Mind {{db-spam} ‘The Mind '''The Min <!-- Pleas
与文档中出现的顺序相同。