XML parsing expat nei dati movimentazione pitone
-
16-09-2019 - |
Domanda
Sto tentando di analizzare un file XML utilizzando python expat. Ho la seguente riga nel mio file XML:
<Action><fail/></Action>
expat identifica i tag di inizio e fine, ma converte < al meno carattere e lo stesso per il maggiore di carattere e quindi analizza in questo modo:
risultato:
START 'Action'
DATA '<'
DATA 'fail/'
DATA '>'
END 'Action'
invece del desiderato:
START 'Action'
DATA '<fail/>'
END 'Action'
Mi piacerebbe avere il risultato desiderato, come posso evitare di fare scherzi expat in su?
Soluzione
expat non lo fa rovinare, <
è semplicemente la codifica XML per la <
carattere. Al contrario, se expat restituirebbe la <
letterale, questo sarebbe un bug rispetto alla specifica XML. Detto questo, si può ovviamente ottenere la versione sfuggito posteriore utilizzando xml.sax.saxutils.escape
:
>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'<fail/>'
Il parser expat è anche libero di segnalare tutti i dati di stringa in qualunque pezzi sembra in forma, in modo da avere per concatenare da soli.
Altri suggerimenti
Sia SAX e StAX parser sono liberi di rompere le corde in qualsiasi modo è conveniente per loro (anche se StAX ha una modalità COALESCE per costringendolo a assemblare i pezzi per voi).
Il motivo è che spesso è possibile scrivere software in certi casi che i flussi e non ha a cuore il sovraccarico di riassemblaggio dei frammenti di stringa.
Di solito si accumulano testo in una variabile e utilizzare i contenuti quando vedo il prossimo evento startElement o endElement. A quel punto, anche reimposta variabile testo accumulata per svuotare.