アプリケーション間でプロジェクト情報を送信するために XML を使用しています。情報の 1 つにプロジェクトの説明があります。ので、私は持っています:
<ProjectDescription>Test & spaces around&some & amps!</ProjectDescription>
または: 「テスト & スペース & いくつか & amps!」<-- いいね!
次に Expat を使用してそれを解析すると、データ ハンドラーは一度に文字列全体の一部だけを取得します。「テスト」、「&」、「前後のスペース」、次の「&」など。その後、元の文字列を再構築しようとすると、データ ハンドラーが到達しないため、& の周りのすべてのスペースが削除されます。彼らを見て。XML を書き直すと、次のようになります。
<ProjectDescription>Test&spaces around&some&amps!</ProjectDescription>
または: 「Test&spaces around&some&s!」<--悪い!
これは既存の回避策に関する既知の問題ですか? エスケープされたシンボルの周りの動作を制御するために Expat に与えることができる設定はありますか?
答えをグーグルで検索しようとした私の試みは、悲惨な失敗に終わりました。
編集:コメントの質問への回答:私はパーサーに登録する独自のハンドラーを持っています:
parser=XML_ParserCreate(NULL);
XML_SetUserData(parser,&depth);
XML_SetElementHandler(parser,startElement,endElement);
XML_SetCharacterDataHandler(parser,dataHandler);
ハンドラーは次のように宣言されます。
static void dataHandler(void *userData,const XML_Char *s,int l)
そして、「s」には要素内のデータが含まれます。「スペースを含む文字列」の場合は、& などがない場合は、開始タグと終了タグの間の文字列全体です。