Frage

Ich versuche, eine XML-Datei mit Python Expat zu analysieren. Ich habe die folgende Zeile in meiner XML-Datei:

<Action>&lt;fail/&gt;</Action>

Expat identifiziert die Start- und End-Tags, sondern wandelt die < auf das weniger als Charakter und das gleiche für die größer ist als Charakter und damit es wie folgt analysiert:

Ergebnis:

START 'Action'
DATA '<'
DATA 'fail/'
DATA '>'
END 'Action'

statt der gewünschten:

START 'Action'
DATA '&lt;fail/&gt;'
END 'Action'

Ich möchte das gewünschte Ergebnis haben, wie verhindere ich Expat von vermasselt?

War es hilfreich?

Lösung

Expat nicht vermasseln, &lt; ist einfach die XML-Codierung für den Charakter <. Ganz im Gegenteil, wenn Expat den wörtlichen &lt; zurückkehren würde, würde dies ein Fehler in Bezug auf die XML-Spezifikation sein. Davon abgesehen, kann man natürlich die maskierte Version wieder durch xml.sax.saxutils.escape mit:

>>> from xml.sax.saxutils import escape
>>> escape("<fail/>")
'&lt;fail/&gt;'

Der Expat-Parser ist auch frei, alle String-Daten in berichten, was auch immer Stücken es scheint fit, so dass Sie sie selbst verketten haben.

Andere Tipps

Sowohl SAX und StAX Parser sind frei, um die Saiten zu brechen in welcher Weise auch immer für sie bequem ist (obwohl StAX hat einen COALESCE-Modus zu zwingen sie die Stücke für Sie zusammenstellen).

Der Grund dafür ist, dass es oft möglich ist, Software in bestimmten Fällen zu schreiben, die Bäche und müssen nicht über die Overhead Zusammenbauen die String-Fragmente sorgen.

In der Regel akkumulieren ich Text in einer Variablen, und den Inhalt verwenden, wenn ich das nächste Startelement oder Endelement Ereignis zu sehen. An diesem Punkt, ich zurückgesetzt auch die akkumulierte Textvariable zu leeren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top