Como posso obter a ordem de uma lista de atributos elemento usando Python xml.sax?
Pergunta
Como posso obter a ordem de uma lista de atributos elemento? Não é totalmente necessário para o processamento final, mas é bom para:
-
em um filtro, para não gratuitamente reordenar a lista de atributos
-
Durante a depuração, imprimir os dados na mesma ordem como ele aparece na entrada
Aqui está o meu processador atributo atual, que faz um dicionário-como passagem sobre os atributos.
class MySaxDocumentHandler(xml.sax.handler.ContentHandler):
def startElement(self, name, attrs):
for attrName in attrs.keys():
...
Solução
Eu não acho que isso pode ser feito com SAX (pelo menos como actualmente suportados pelo Python). Pode ser feito com expatriados , definindo o atributo ordered_attributes
do objeto analisador para True
( os atributos são, então, duas listas paralelas, um dos nomes e um dos valores, na mesma ordem como na fonte de XML).
Outras dicas
Infelizmente, é impossível na implementação Python de Sax.
Este código da biblioteca Python (v2.5) diz-lhe tudo o que você precisa saber:
class AttributesImpl:
def __init__(self, attrs):
"""Non-NS-aware implementation.
attrs should be of the form {name : value}."""
self._attrs = attrs
O manipulador StartElement
é passado um objeto implementar a especificação AttributeImpl
, que usa um simples ol' Python tipo dict
a pares armazenamento de chave / valor. tipos dict
Python não fim garantia de chaves.