2012-07-09 13 views
8

Tentativo di analizzare il seguente file Python utilizzando la funzione lxml.etree.iterparse.analisi di file xml di grandi dimensioni con Python - errore etree.parse

"sampleoutput.xml"

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

ho provato il codice Parsing Large XML file with Python lxml and Iterparse

prima della etree.iterparse (MYFILE) chiamo ho fatto MYFILE = open ("/ Users/eric/Desktop/wikipedia_map /sampleoutput.xml","r ")

Ma si scopre il seguente errore

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 

qualche idea? grazie!

+1

Potrebbe essere che il file XML non è corretto? Non contiene tag ' C0deH4cker

+1

Non so lxml, ma il tuo esempio non è XML valido. Un documento XML deve avere un singolo elemento radice. Il tuo no. –

+1

è necessario un elemento radice, non solo i nodi figlio. – pinkdawn

risposta

7

Il problema è che XML non è ben formato se non ha esattamente un tag di primo livello. Puoi correggere il tuo campione avvolgendo l'intero documento nei tag <items></items>. È inoltre necessario che i tag <desc/> corrispondano alla query che si sta utilizzando (description).

il seguente documento produce risultati corretti con il codice esistente:

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

e se il file è così grande e non voglio caricarlo in memoria, quindi lo sto analizzando usando iterparse? –

3

Per quanto ne so, xml.etree.ElementTree di solito si aspetta che il file XML contenga un elemento "root", vale a dire un tag XML che racchiude la struttura completa del documento. Dal messaggio di errore che hai postato presumo che questo è il problema anche qui:

'Line 5'si riferisce alla seconda <item> tag, quindi credo Python si lamenta che non c'è più dati seguenti dopo l'elemento radice assunto (cioè il primo tag <item>) è stato chiuso.

Problemi correlati