いかだに組み込むバイナリデータをXML?
-
09-06-2019 - |
質問
してい用途のJavaで記述されたことを相互に通信を使用XMLメッセージのネットワーク.を使用していSAXパーサは、受信側へのデータを取得しなければならないのメッセージの要件は、組み込みバイナリデータをXMLメッセージがSAXません。というかるのか?
更新:私はこの Base64 クラスから apache commonsコーデック図書館, 場合には、誰もしています。
解決
またエンコード、バイナリデータをbase64では、Base64素以下の条項がなかなか良いのです。
他のヒント
XMLで汎用性の高...
<DATA>
<BINARY>
<BIT index="0">0</BIT>
<BIT index="1">0</BIT>
<BIT index="2">1</BIT>
...
<BIT index="n">1</BIT>
</BINARY>
</DATA>
XMLのような暴力はっていることを確認してください解決の問題だけを使用しないで十分です。
編集:
ちなみ:Base64+CDATAであろう最良の解決策
(EDIT2:
誰upmodsってください。upmodの答えです。られませんが、魂ちに実施する私の方法で最高ランクです。)
Base64でエンコードは右の応答がCDATAでないが、基本的に言う:"これは何もしな ない するだけでも、それをBase64エンコードバイナリデータです。XMLスキーマ定義 ベースは64バイナリーとしてのプリミティブデータ型 るなどで使用できる運用時にコントロールする。
私はこの問題です。またserialize PDFファイル送信で、XMLファイルをサーバーです。
います。ネットバイナリファイルを直接base64でエンコード文字列のうち、いず内部のXML要素になります。
string base64 = Convert.ToBase64String(File.ReadAllBytes(fileName));
または方法がありされていれXmlWriterオブジェクトです。私の特定のケースでは、私を含むMicrosoftのデータ型の名前空間:
StringBuilder sb = new StringBuilder();
System.Xml.XmlWriter xw = XmlWriter.Create(sb);
xw.WriteStartElement("doc");
xw.WriteStartElement("serialized_binary");
xw.WriteAttributeString("types", "dt", "urn:schemas-microsoft-com:datatypes", "bin.base64");
byte[] b = File.ReadAllBytes(fileName);
xw.WriteBase64(b, 0, b.Length);
xw.WriteEndElement();
xw.WriteEndElement();
string abc = sb.ToString();
文字列"abcに見えるものは以下のようなものです:
<?xml version="1.0" encoding="utf-16"?>
<doc>
<serialized_binary types:dt="bin.base64" xmlns:types="urn:schemas-microsoft-com:datatypes">
JVBERi0xLjMKJaqrrK0KNCAwIG9iago8PCAvVHlwZSAvSW5mbw...(plus lots more)
</serialized_binary>
</doc>
私は通常エンコード、バイナリデータ MIME Base64 または URLエンコーディング.
みBase64符号化/復号自のバイナリデータです。もCDATAセクション
かもエンコードとして知られるセットのような基64一般的な選択である。
他の バイナリ文字エンコード しかできないリックを達成しています。使っていう
<data encoding="yEnc>
<![CDATA[ encoded binary data ]]>
</data>
その答えは、きみさらに、スペース効率の高い、エンコード方式のようにyEnc.(yEnc wikipediaにリンク とyEncもチェックサムの能力を右"のボックス".読むとリンクします。もちろん、XMLいませんのネイティブyEncインターネットにアクセスのXMLスキーマに更新することが望ましく適切に記載の符号化されたノードです。
なぜ:によるエンコード戦略をbase64/63,uuencode et al.エンコーディングの量を増やデータ(架線)に必要なもの店舗譲渡による約40%減yEncの1-2%).にしている内容に応じてエンコードの40%が、架き/問題になっています。
yEnc-Wikipedia要旨: https://en.wikipedia.org/wiki/YEnc yEncはバイナリ文字エンコーディング方式のための転送バイナリファイルをメッセージUsenetまたはe-mail<url>...追加のyEnc以上前のエンコードが完了していない商品についてuuencode、Base64でエンコードに含まれるCRCチェックサムを確認するの復号化されたファイルを納入しています。
Base64でオーバーヘッドは33%になった。
BaseXML のためのXML1.0 オーバーヘッドが20%.な標準としてCの実装はまだない。チェックしてみてい関するデータのサイズです。ただしブラウザが実施圧縮である。
私に取り組んでおりますが、その後の議論がこのスレッド: エンコードバイナリデータをXML:代替base64.
こともでき Uuencode き独自のバイナリデータです。このフォーマットは以上では同じことをしていbase63エンコーディングです。
の場合を管理してXMLフォーマットすの問題を徹底的に向き合うことしかない。より取り付けのバイナリをXMLについてどのように考えればよいかに同封して文書を複数の部品、含有する形式をサポートしています。
従来のリューションはアーカイブ(tar).だいご囲むドキュメント内のテキスト形式またはいない場合はスにアクセスできるファイルのアーカイブ図書館が標準化されたスキームに使用される大量のメール、HTTPる multipart/*MIME と Content-Transfer-Encoding:バイナリー.
例えば場合はサーバーコミュニケーションをHTTPを送りたいマルチパートドキュメントでは、主として、XMLドキュメントはバイナリデータは、HTTP通信のようになります:
POST / HTTP/1.1
Content-Type: multipart/related; boundary="qd43hdi34udh34id344"
... other headers elided ...
--qd43hdi34udh34id344
Content-Type: application/xml
<myxml>
<data href="cid:data.bin"/>
</myxml>
--qd43hdi34udh34id344
Content-Id: <data.bin>
Content-type: application/octet-stream
Content-Transfer-Encoding: binary
... binary data ...
--qd43hdi34udh34id344--
として上記の例では、XMLのバイナリデータの封入によるマルチパート cid
URIのスキームである識別子のコンテンツ-Idヘッダを表します。オーバーヘッドのこのスキームのように、MIMEヘッダを表します。同様のスキームにも使用できますHTTPます。もちろん、HTTPプロトコル、オプションもありますのご理解とご協力を通じて、マルチパートの文書は別々の要求に応じます。
いようにしたい場合包装したデータは、マルチパートを利用データのURI:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
このbase64オーバーヘッド。