2012-07-11 21 views
11

Estoy usando Python's xml.etree.ElementTree para hacer un análisis XML en un archivo. Sin embargo, me sale este error a mitad de camino a través del documento:Análisis XML en Python: expaterror no bien formado

xml.parsers.expat.ExpatError: not well-formed (invalid token): line X, column Y 

así que ir a la línea X, Y columna en vim y veo un signo (&) con el fondo rojo destacando. ¿Qué significa esto?

También los dos caracteres que lo preceden son >>, entonces ¿hay algo especial sobre >>&?

¿Alguien sabe cómo solucionar esto?

Respuesta

12

El & es un carácter especial en XML, utilizado para entidades de caracteres. Si su XML tiene & sentado allí solo, no como parte de una entidad como & o ѐ o similar, entonces el XML no es válido.

+0

creo que el problema podría ser que tengo un elemento de múltiples líneas (cadena). Esencialmente para este elemento, hice un grep (regex) | cabeza -5, para recuperar 5 líneas, luego pegado en el archivo como un elemento xml. ¿Sería mejor hacer 5 elementos separados de alguna manera? – JDS

+0

No se trata de cuántos elementos hay, sino de los personajes que contiene. Simplemente no puede poner el carácter & en un documento XML por sí mismo. Debe escapar reemplazándolo con '&'. – BrenBarn

+0

un poco de texto y ese personaje ¿está bien? También estoy leyendo en estas líneas desde muchos archivos diferentes, así que no estoy seguro de cómo podría escapar automáticamente (leer desde un script bash usando grep y luego salir a un archivo) – JDS

0

puedo resolver mediante el uso de yattag lugar

from yattag import indent 
print indent(xml_string.encode('utf-8')) 
Cuestiones relacionadas