analizar el archivo XML en Python con cElementTree: se trata de errores y el número de línea en el archivo

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

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top