2009-07-17 42 views
0

私は、python expatを使用してXMLファイルを解析しようとしています。私は私のXMLファイルに次の行を持っている:XMLを解析して、XMLを解析する際のXMLの解析

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

expatのは、開始タグと終了タグを識別しますが& LTを変換します。私が持っていると思います

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

結果:

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

代わりに希望の文字未満と同じ文字よりも大きいため、したがって、このようにそれを解析します希望の結果、どのように私は外国人が混乱するのを防ぐのですか?

答えて

2

expatが台無しにならないように、&lt;は単に文字<のXMLエンコーディングです。逆に、expatがリテラル&lt;を返す場合、これはXML仕様に関するバグです。

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

expatのパーサが、それはフィットと思われるものは何でもチャンクでも、すべての文字列データを報告して自由であるので、あなたは彼らに自分を連結する必要があります:それは、あなたはもちろんxml.sax.saxutils.escapeを使用してバックエスケープバージョンを取得することができ言われています。

0

SAXとStAXの両方のパーサーは、StAXに便利な方法で文字列を分割することができます(ただし、StAXには断片を組み立てるためのCOALESCEモードがあります)。

理由は、ソフトウェアがストリーミングであり、ストリングフラグメントを再アセンブルするオーバーヘッドに気を配る必要がない場合があります。

通常、変数にテキストを累積し、次のStartElementまたはEndElementイベントが表示されたらその内容を使用します。その時点で、蓄積テキスト変数も空に戻しました。