0

Python expat を使用して XML ファイルを解析しようとしています。XML ファイルに次の行があります。

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

expat は開始タグと終了タグを識別しますが、 & lt; を変換します。より小さい文字とより大きい文字についても同じであるため、次のように解析します。

結果:

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

希望の代わりに:

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

望ましい結果を得たいのですが、どうすれば海外駐在員が混乱するのを防ぐことができますか?

4

2 に答える 2

2

expat はめちゃくちゃで&lt;はなく、単に文字の XML エンコーディングです<。逆に、expat がリテラルを返す場合&lt;、これは XML 仕様に関するバグになります。そうは言っても、もちろん、次を使用してエスケープされたバージョンを取得できますxml.sax.saxutils.escape

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

また、expat パーサーは、すべての文字列データを適切と思われるチャンクで自由に報告できるため、それらを自分で連結する必要があります。

于 2009-07-17T18:49:20.477 に答える
1

SAX パーサーと StAX パーサーはどちらも、都合のよい方法で文字列を自由に分割できます (ただし、StAX には、部分を強制的に組み立てるための COALESCE モードがあります)。

その理由は、特定のケースでは、ストリーミングするソフトウェアを作成できることが多く、文字列フラグメントを再構築するオーバーヘッドを気にする必要がないためです。

通常、テキストを変数に蓄積し、次の StartElement または EndElement イベントが発生したときにその内容を使用します。その時点で、積み上げテキスト変数も空にリセットしました。

于 2009-07-17T21:37:28.717 に答える