Elementtree, отображающий элементы не по порядку - PullRequest
0 голосов
/ 30 октября 2011

Я использую ElementTree в Python для анализа 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.Проходя мой код и выполняя его шаг за шагом, я решил проблему - я застрял в листе reverse () в неверном месте списка элементов, что вызвало все проблемы.Большое спасибо за вашу помощь - извините, это была такая глупая проблема.

1 Ответ

1 голос
/ 30 октября 2011

В документации для 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')

Результат:

&#x2018;The Mind 
{{db-spam}
&#x2018;The Mind 
'''The Min
<!-- Pleas

В том же порядке, в каком они отображаются в документе.

...