2012-07-09 24 views
8

Se intenta analizar el siguiente archivo de Python utilizando la función lxml.etree.iterparse.análisis de un archivo xml grande con Python - etree.parse error

"sampleoutput.xml"

<item> 
    <title>Item 1</title> 
    <desc>Description 1</desc> 
</item> 
<item> 
    <title>Item 2</title> 
    <desc>Description 2</desc> 
</item> 

probé el código de Parsing Large XML file with Python lxml and Iterparse

antes de la etree.iterparse (MIARCHIVO) llamo yo MIARCHIVO = open ("/ Users/Eric/Escritorio/wikipedia_map /sampleoutput.xml","r ")

Pero resulta el siguiente error

Traceback (most recent call last): 
    File "/Users/eric/Documents/Programming/Eclipse_Workspace/wikipedia_mapper/testscraper.py", line 6, in <module> 
    for event, elem in context : 
    File "iterparse.pxi", line 491, in lxml.etree.iterparse.__next__ (src/lxml/lxml.etree.c:98565) 
    File "iterparse.pxi", line 543, in lxml.etree.iterparse._read_more_events (src/lxml/lxml.etree.c:99086) 
    File "parser.pxi", line 590, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:74712) 
lxml.etree.XMLSyntaxError: Extra content at the end of the document, line 5, column 1 

alguna idea? ¡gracias!

+1

Podría ser que el archivo XML es incorrecto? No contiene ninguna etiqueta ' C0deH4cker

+1

No sé lxml, pero su ejemplo no es XML válido. Un documento XML debe tener un único elemento raíz. La tuya no. –

+1

necesita un elemento raíz, no solo nodos secundarios. – pinkdawn

Respuesta

7

El problema es que XML no está bien formado si no tiene exactamente una etiqueta de nivel superior. Puede corregir su muestra envolviendo todo el documento en las etiquetas <items></items>. También necesita las etiquetas <desc/> para que coincida con la consulta que está utilizando (description).

el siguiente documento produce resultados correctos con su código existente:

<items> 
    <item> 
    <title>Item 1</title> 
    <description>Description 1</description> 
    </item> 
    <item> 
    <title>Item 2</title> 
    <description>Description 2</description> 
    </item> 
</items> 
+0

¿Qué sucede si el archivo es tan grande y no quiero cargarlo en la memoria, entonces lo estoy analizando usando iterparse? –

3

Por lo que sé, xml.etree.ElementTree normalmente espera que el archivo XML contenga un elemento "raíz", es decir, una etiqueta XML que encierra la estructura completa del documento. Del mensaje de error que publiqué, asumiría que este es también el problema aquí:

'Línea 5'se refiere a la segunda etiqueta <item>, así que supongo que Python se queja de que hay más datos tras el supuesto elemento raíz (es decir, la primera etiqueta <item>) se cerró.

Cuestiones relacionadas