質問

オーバーヘッドの代わりに、 バイナリを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 のない標準エンティティ コンテンツでは次のようになります。

  • 「<」と「>」の使用は違法です
  • 「&」の使用は制限されています(&eacute; 大丈夫です、 &zajdalkdza; ではありません)

したがって、CDATA は、代わりに「]]>」を制限することで、「<」、「>」、および「&」を許可する方法にすぎません。主な問題である不正な XML、Unicode、UTF-8 文字の問題は解決されません。

解決策:

  1. 使用 Base64 33% のオーバーヘッドが発生しますが、すべてのプログラミング言語で大規模にサポートされており、それが標準であるという事実
  2. 使用 BaseXML 実装はまだ限られていますが、オーバーヘッドは 20% のみです
  3. 可能であればバイナリデータを XML 内でエンコードせず、個別に転送してください

XMLはテキスト形式である - バイナリデータを格納するためにそれを使用しないでください。別々のファイルにバイナリ・ブロブを入れて、これらのファイルを参照するあなたのXMLに要素を追加します。あなたは、単一のファイル内のすべてのバイナリ・ブロブを保存したい場合は、そのようなオフセット属性または何かを追加...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top