Elementtree 显示元素顺序错误

0 投票
1 回答
1687 浏览
提问于 2025-04-17 05:16

我正在使用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

它们的顺序和文档中出现的一样。

撰写回答