Как я могу получить порядок в списке атрибутов элемента, используя Python xml.sax?
Вопрос
Как я могу получить порядок в списке атрибутов элемента?Это не совсем необходимо для окончательной обработки, но приятно:
в фильтре, чтобы не изменять порядок списка атрибутов без необходимости
во время отладки выведите данные в том же порядке, в каком они отображаются во входных данных
Вот мой текущий обработчик атрибутов, который выполняет словарный переход по атрибутам.
class MySaxDocumentHandler(xml.sax.handler.ContentHandler):
def startElement(self, name, attrs):
for attrName in attrs.keys():
...
Решение
Я не думаю, что это можно сделать с помощью SAX (по крайней мере, в том виде, в каком он сейчас поддерживается Python).Это можно было бы сделать с эмигрант, установив ordered_attributes
атрибут объекта синтаксического анализатора True
(атрибуты представляют собой два параллельных списка, один из имен и один из значений, в том же порядке, что и в источнике XML).
Другие советы
К сожалению, это невозможно в Python-реализации Sax.
Этот код из библиотеки Python (версия 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
введите для хранения пар ключ / значение.Питон dict
типы не гарантируют порядок расположения ключей.