Domanda

Sto tentando di analizzare un file XML utilizzando python expat. Ho la seguente riga nel mio file XML:

<Action>&lt;fail/&gt;</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 '&lt;fail/&gt;'
END 'Action'

Mi piacerebbe avere il risultato desiderato, come posso evitare di fare scherzi expat in su?

È stato utile?

Soluzione

expat non lo fa rovinare, &lt; è semplicemente la codifica XML per la < carattere. Al contrario, se expat restituirebbe la &lt; 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/>")
'&lt;fail/&gt;'

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top