analisar o arquivo XML em python com cElementTree: lidar com erros e número da linha no arquivo
-
12-09-2019 - |
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
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.