¿Cómo debo lidiar con un XMLSyntaxError en el lxml de Python mientras analizo un archivo XML grande?
Estoy tratando de analizar un archivo XML de más de 2 GB con la biblioteca lxml de Python. Desafortunadamente, el archivo XML no tiene una línea que indique la codificación de caracteres, por lo que tengo que configurarlo manualmente. Sin embargo, mientras itera por el archivo, todavía hay algunos personajes extraños que aparecen de vez en cuando.
No estoy seguro de cómo determinar la codificación de caracteres de la línea, pero además, lxml generará un XMLSyntaxError desde el alcance del bucle for. ¿Cómo puedo detectar este error correctamente y tratarlo correctamente? Aquí hay un fragmento de código simplista:
from lxml import etree
etparse = etree.iterparse(file("my_file.xml", 'r'), events=("start",), encoding="CP1252")
for event, elem in etparse:
if elem.tag == "product":
print "Found the product!"
elem.clear()
Esto eventualmente produce el error:
XMLSyntaxError: PCDATA invalid Char value 31, line 1565367, column 50
Esa línea del archivo se ve así:
% sed -n "1565367 p" my_file.xml
<romance_copy>Ravioli Florentine. Tender Ravioli Filled With Creamy Ricotta Cheese And
La 'F' de lleno realmente se ve así en mi terminal: