analizar el archivo XML en Python con cElementTree: se trata de errores y el número de línea en el archivo
-
12-09-2019 - |
Pregunta
Estoy utilizando la biblioteca cElementTree
para analizar archivos XML en Python.
Todo está funcionando bien
Pero me gustaría proporcionar mensajes de error completo para el usuario cuando un valor en el XML no es correcto.
Por ejemplo, supongamos que tengo el siguiente código XML:
<A name="xxxx" href="yyyy"/>
y quiere indicar al usuario si el atributo href
no existe o tiene un valor que no está en una lista dada.
Por el momento, tengo algo así como
if elem.get("ref") not in myList:
raise XMLException( elem, "the 'href' attribute is not valid or does not exist")
donde mi excepción se detecta algún lugar.
Pero, además, me gustaría mostrar el número de línea del elemento XML en el archivo. Parece que el cElementTree
no almacena ninguna información sobre los números de línea de los elementos XML del árbol ...: - (
Pregunta: ¿Hay una biblioteca XML equivalente que sea capaz de hacer eso? O una manera de tener acceso a la posición de un elemento XML en el archivo XML?
Gracias
Solución
La biblioteca equivalente que se debe utilizar es lxml . lxml es un envoltorio muy rápido en bibliotecas de C libxml2 y libxslt y generalmente se considera superior a la incorporada en los.
Es, por suerte, trata de mantener a la API de árbol de elementos y extenderla en lxml.etree.
lxml.etree tiene una sourceline atributo para todos los elementos que es justo lo que está después.
Así elem.sourceline
más arriba en el mensaje de error debería funcionar.