Como posso obter a ordem de uma lista de atributos elemento usando Python xml.sax?

StackOverflow https://stackoverflow.com/questions/998514

  •  14-09-2019
  •  | 
  •  

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():
            ...
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top