CDATA を使用して生のバイナリ ストリームを保存しますか?
質問
オーバーヘッドの代わりに、 バイナリをBase64として保存, CDATA を使用したりコメントアウトしたりして、2 バイトのバイナリ ストリームを XML ファイルに直接保存できるかどうか疑問に思っていました。
解決
あなたはCDATAとして、それを保存することができますが、いくつかのバイト配列はCDATAセクションを閉じ、有効なXMLと評価されますリスクがあります。 // WWW: HTTPで簡単に見た後。 w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect に、あなたが「]]>」を除く文字の任意のシーケンスを持つことができるようです。有効なXML文字を見てください>すぎます。
他のヒント
(Cでの '\ 0')NUL文字でもエスケープとして、どこにでもXMLで有効ではありません(�)。
いいえ、CDATA を単独で使用してバイナリ データを XML ファイルに挿入することはできません。
XML1.0 では (XML 1.1 はより寛容ですが、制御文字に関してはそうではないため)、CDATA 文字に次の制限が適用されます。
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
これは、いくつかの文字が不正であることを意味します。その中には次のようなものがあります。
- 不正な XML 制御文字 0x00 ~ 0x20 (改行、キャリッジ リターン、タブを除く)
- 0xFF や非正規の 0b1100000x 0b10xxxxxx などの不正な UTF-8 シーケンス
それに加えて、 CDATA のない標準エンティティ コンテンツでは次のようになります。
- 「<」と「>」の使用は違法です
- 「&」の使用は制限されています(
é
大丈夫です、&zajdalkdza;
ではありません)
したがって、CDATA は、代わりに「]]>」を制限することで、「<」、「>」、および「&」を許可する方法にすぎません。主な問題である不正な XML、Unicode、UTF-8 文字の問題は解決されません。
解決策:
XMLはテキスト形式である - バイナリデータを格納するためにそれを使用しないでください。別々のファイルにバイナリ・ブロブを入れて、これらのファイルを参照するあなたのXMLに要素を追加します。あなたは、単一のファイル内のすべてのバイナリ・ブロブを保存したい場合は、そのようなオフセット属性または何かを追加...