2011-11-14 21 views
7

Sto leggendo un file xml utilizzando Python. Ma il mio file XML contiene & caratteri, a causa della quale durante l'esecuzione il mio codice Python, dà il seguente errore:Python restituisce l'errore "Non ben formato xml" a causa della presenza di caratteri "&"

xml.parsers.expat.ExpatError: not well-formed (invalid token): 

Esiste un modo per ignorare il controllo & da Python?

+1

possibile duplicato di [Come faccio a scappare e commerciali in XML?] (Http://stackoverflow.com/questions/1328538/how-do-i-escape-ampersands -in-xml) –

+0

@James: non proprio, dal momento che la domanda riguarda l'analisi di qualcosa che è quasi, ma non del tutto XML, non come creare correttamente XML in primo luogo. – geoffspear

+3

Hai il controllo su qualunque abominio sta creando il file "XML" originale in modo che tu possa farlo effettivamente fornire un XML valido? – geoffspear

risposta

6

No, non è possibile ignorare il controllo. Il tuo 'file xml' non è un file XML - per essere un file XML, la e commerciale dovrebbe essere sfuggita. Pertanto, nessun software progettato per leggere i file XML lo analizzerà senza errori. È necessario correggere il software che ha generato questo file in modo da generare un XML corretto ("ben formato"). Tutti i vantaggi dell'uso dell'XML per lo scambio spariscono completamente se la gente inizia a inviare cose che non sono ben formate e le persone che lo ricevono provano a ripararle.

+3

Questo non è giusto. 1) C'è un sacco di soft che analizzano un file di questo tipo - qualsiasi browser internet, così come IDE come Xcode. 2) Non è possibile chiedere alle persone di correggere il soft che produce l'XML solo perché in generale è di terze parti soft. – LiMar

+0

Potrebbero esserci prodotti software in grado di analizzare tali file, ma tale prodotto software non è un parser XML. Sono necessari parser XML conformi per riportare tutti gli errori nei file XML. I browser Internet, per quanto sono in grado di stabilire, rifiutano correttamente un file servito come XML se contiene una e commerciale senza caratteri di escape. –

+2

E quando il software genera codice XML errato, risolverlo è la soluzione giusta. Generare codice XML errato equivale a generare un formato proprietario della propria invenzione: non è necessario adottare uno standard e quindi non implementarlo correttamente. –

2

Per me aggiungendo la riga "<?xml version='1.0' encoding='iso-8859-1'?>" nella parte anteriore la stringa ha fatto il trucco.

>>> text = '''<?xml version="1.0" encoding="iso-8859-1"?> 
    ... <seuss><fish>red</fish><fish>blu\xe9</fish></seuss>''' 
>>> doc = elementtree.ElementTree.fromstring(text) 

consultare questa pagina https://mail.python.org/pipermail/tutor/2006-November/050757.html