4

XML 仕様では、これが「外部解析済みエンティティ」を処理するための動作でなければならないと述べています。しかし、これは要素内の CDATA セクションにも当てはまりますか? なんで?\rに変更する代わりに、パーサー コードに 1/2 条件を追加して \r を未変換にする方法はありますか

4

2 に答える 2

2

これは実際にそうです。なんで?これは、XML ファイルからの出力を処理するアプリケーションの寿命を単純化するためのものです。改行がどの形式であるかを気にする必要がなく、アプリケーションの互換性が向上します (Linux と Windows 間の単純なテキスト エディターの互換性を考慮してください。ほとんどファイルは常に正しく表示されず、Windows ではほとんどの場合 1 行で表示されます)。

もちろん、何らかの理由で \r を未変換にする必要がある場合は、既存の XML パーサーの実装を簡単に変更できます。tinyxml では、TiXmlBase::ReadText() 関数を変更する必要があります。または、空白をそのまま残していた古いバージョンの関数を取得することもできます。

一方、設計の観点からは、文字置換関数を使用してパーサー出力を実行し、すべての "\n" を "\r\n" に置き換える方がはるかにクリーンです。

もちろん、出力をそのまま使用するのが最善ですが、今のところ、これが必要になるシナリオは想像できません。

于 2012-11-04T19:39:08.100 に答える
1

CDATA は名前付きの文字データではありません。あなたの状況に対処する唯一のエレガントな方法は、Base64 としてエンコードすることです。

Base64 は、255 文字すべてを印刷可能な 64 文字にエンコードします。64 のオプションで 255 の可能性を得るには、テキストが少し大きくなりますが、XML レイアウトを次のように変更することを除いて、それが唯一のオプションになります。

<TEXT>
  <CHAR>13</CHAR>
  <CHAR>255</CHAR>
</TEXT>

しかし、私の意見では、それは&#13;あなたが今得ているよりもさらに悪いです.

http://www.ibm.com/developerworks/xml/library/x-cdata/ XML 内のバイナリ データの処理について詳しくは、このサイトにアクセスしてください。

お役に立てば幸いです。

于 2012-11-05T13:46:55.223 に答える