Как я могу получить порядок списка атрибутов элемента, используя Python xml.sax? - PullRequest
0 голосов
/ 16 июня 2009

Как получить порядок списка атрибутов элемента? Это не совсем необходимо для окончательной обработки, но приятно:

  • в фильтре, чтобы не изменять порядок списка атрибутов

  • во время отладки выведите данные в том же порядке, в каком они отображаются на входе

Вот мой текущий обработчик атрибутов, который выполняет словесную передачу атрибутов.

class MySaxDocumentHandler(xml.sax.handler.ContentHandler):
    def startElement(self, name, attrs):
        for attrName in attrs.keys():
            ...

Ответы [ 2 ]

1 голос
/ 16 июня 2009

К сожалению, это невозможно в реализации Sax на Python.

Этот код из библиотеки Python (v2.5) говорит вам все, что вам нужно знать:

class AttributesImpl:

    def __init__(self, attrs):
        """Non-NS-aware implementation.
        attrs should be of the form {name : value}."""

        self._attrs = attrs

Обработчику StartElement передается объект, реализующий спецификацию AttributeImpl, которая использует простой тип Python dict для хранения пар ключ / значение. Типы Python dict не гарантируют порядок ключей.

1 голос
/ 16 июня 2009

Я не думаю, что это можно сделать с помощью SAX (по крайней мере, в настоящее время поддерживается Python). Это можно сделать с помощью expat , установив для атрибута ordered_attributes объекта синтаксического анализатора значение True (тогда атрибуты представляют собой два параллельных списка, одно из имен и одно из значений, в том же порядке, что и в источник XML).

...