Elementtree 显示元素顺序错误
我正在使用Python的ElementTree来解析xml文件。我用“findall”来找到所有的“revision”子元素,但当我遍历结果时,它们的顺序并不是文档中的顺序。我可能哪里做错了呢?
这是我的代码:
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
- 哎呀。通过逐行检查我的代码并运行,我找到了问题所在 - 我在元素列表的错误位置使用了reverse(),这导致了一切麻烦。非常感谢你的帮助 - 对不起,这真是个小问题。
1 个回答
2
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
它们的顺序和文档中出现的一样。