2

&#XX;を含む大きな XML ドキュメント (ギガバイト) を読まなければなりません。通常、これらの文字セット (<32) は ASCII デバイス制御用に予約されていることを認識しています。

ファイルの作成者は、この文字セットをテキスト内で使用することを決定しましたが、それを変更することは私の手の及ばないことです。

xml file: のヘッダーを宣言するときに、UTF-8以外のさまざまな xml エンコーディング スキームの宣言を<?xml version="1.0" encoding ="UTF-8"?>試みましたが、XML パーサーでレンダリングしようとしても成功しません。

問題を再現可能で明確にするために、以下の単純な xml ファイルを検討してください (たとえば、Fred という名前の後の文字セット):

<?xml version="1.0" encoding ="UTF-8"?> 
<TABLE> 
 <GRADES> 
 <STUDENT> Fred &#01; </STUDENT> 
 <TEST1> 1 </TEST1> 
 <TEST2> 2 </TEST2> 
 <FINAL> 3 </FINAL> 
 </GRADES> 
 <GRADES> 
 <STUDENT> Wilma </STUDENT> 
 <TEST1> 1 </TEST1> 
 <TEST2> 2 </TEST2> 
 <FINAL> 3 </FINAL> 
 </GRADES> 
</TABLE>

これらのファイルを別のブラウザーで読み取ると、次のエラーが表示されます。

列 22 の 4 行目のエラー: xmlParseCharRef: 無効な xmlChar 値 1

考えられる解決策は、元のファイルを前処理して、エラーの原因となっている文字を見つけて置き換えることであることは知っていますが、この問題を回避する他の方法を知っている人はいますか? &#XX;をサポートする特定のエンコーディングはありますか? 文字セット (XX < 32) ?

4

1 に答える 1

3

XML 1.0 では、すべての文字が有効というわけではありません。( http://www.w3.org/TR/REC-xml/#charsets )

ツールが XML 1.1 をサポートしている場合、ツールをそのモードに切り替えると、以前は禁止されていた文字の一部が許可されます ( http://www.w3.org/TR/xml11/#charsets )

通常の解決策は、制御文字を XML 文書に入れようとしないことです。代わりに、バイナリ データを 16 進数、base64、またはその他のテキスト表現としてエンコードし、必要に応じてアプリケーション コードでバイナリに変換します。

于 2013-12-27T17:41:58.090 に答える