Pergunta

Eu estou usando a biblioteca cElementTree para analisar arquivos XML em Python. Tudo está funcionando bem

Mas eu gostaria de fornecer mensagens de erro completo para o usuário quando um valor no XML não está correta.

Por exemplo, vamos supor que eu tenho o seguinte XML:

<A name="xxxx" href="yyyy"/>

e quero dizer ao usuário se o atributo href não existe ou tem um valor que não está em uma determinada lista.

No momento, eu tenho algo parecido

if elem.get("ref") not in myList:
    raise XMLException( elem, "the 'href' attribute is not valid or does not exist")

em algum lugar onde minha exceção é capturada.

Mas, além disso, eu gostaria de exibir o número da linha do elemento de XML no arquivo. Parece que o cElementTree não armazena qualquer informação sobre os números de linha dos elementos XML da árvore ...: - (

Pergunta: Existe uma biblioteca XML equivalente que é capaz de fazer isso? Ou uma maneira de ter acesso à posição de um elemento XML no arquivo XML?

Graças

Foi útil?

Solução

A biblioteca equivalente que você deve estar usando é lxml . lxml é um invólucro em muito rápido c bibliotecas libxml2 e libxslt e é geralmente considerado superior ao construído em queridos.

É, felizmente, tenta manter a api elemento árvore e estendê-lo em lxml.etree.

lxml.etree tem uma sourceline atributo para todos os elementos que é apenas o que você está depois.

Assim elem.sourceline acima na mensagem de erro deve funcionar.

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