Elementtree无序显示元素

时间:2011-10-30 02:03:04

标签: python xml elementtree

我正在使用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。通过我的代码并逐个运行它,我解决了问题 - 我在错误的地方的元素列表中陷入了反向(),这导致了所有的麻烦。非常感谢你的帮助 - 对不起,这是一个如此愚蠢的问题。

1 个答案:

答案 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

与文档中出现的顺序相同。