XML 仕様では、これが「外部解析済みエンティティ」を処理するための動作でなければならないと述べています。しかし、これは要素内の CDATA セクションにも当てはまりますか? なんで?\r
に変更する代わりに、パーサー コードに 1/2 条件を追加して \r を未変換にする方法はありますか
2 に答える
これは実際にそうです。なんで?これは、XML ファイルからの出力を処理するアプリケーションの寿命を単純化するためのものです。改行がどの形式であるかを気にする必要がなく、アプリケーションの互換性が向上します (Linux と Windows 間の単純なテキスト エディターの互換性を考慮してください。ほとんどファイルは常に正しく表示されず、Windows ではほとんどの場合 1 行で表示されます)。
もちろん、何らかの理由で \r を未変換にする必要がある場合は、既存の XML パーサーの実装を簡単に変更できます。tinyxml では、TiXmlBase::ReadText() 関数を変更する必要があります。または、空白をそのまま残していた古いバージョンの関数を取得することもできます。
一方、設計の観点からは、文字置換関数を使用してパーサー出力を実行し、すべての "\n" を "\r\n" に置き換える方がはるかにクリーンです。
もちろん、出力をそのまま使用するのが最善ですが、今のところ、これが必要になるシナリオは想像できません。
CDATA は名前付きの文字データではありません。あなたの状況に対処する唯一のエレガントな方法は、Base64 としてエンコードすることです。
Base64 は、255 文字すべてを印刷可能な 64 文字にエンコードします。64 のオプションで 255 の可能性を得るには、テキストが少し大きくなりますが、XML レイアウトを次のように変更することを除いて、それが唯一のオプションになります。
<TEXT>
<CHAR>13</CHAR>
<CHAR>255</CHAR>
</TEXT>
しかし、私の意見では、それは
あなたが今得ているよりもさらに悪いです.
http://www.ibm.com/developerworks/xml/library/x-cdata/ XML 内のバイナリ データの処理について詳しくは、このサイトにアクセスしてください。
お役に立てば幸いです。