Wenn Sie Kontrolle über das XML-Format haben, sollten Sie das Problem umkehren. Anstatt das binäre XML anzuhängen, sollten Sie darüber nachdenken, wie Sie ein Dokument einschließen, das aus mehreren Teilen besteht, von denen einer XML enthält.
Die traditionelle Lösung ist ein Archiv (z. B. Teer). Wenn Sie jedoch Ihr umschließendes Dokument in einem textbasierten Format aufbewahren möchten oder wenn Sie keinen Zugriff auf eine Dateiarchivierungsbibliothek haben, gibt es auch ein standardisiertes Schema, das in E-Mails und HTTP multipart/* MIME mit Content-Transfer-Encoding: binary stark verwendet wird.
Zum Beispiel, wenn Ihr Server über HTTP zu kommunizieren und Sie möchten ein mehrteiliger Dokument senden, das primäre ist ein XML-Dokument, das in eine binäre Daten bezieht, kann die HTTP-Kommunikation wie folgt aussehen:
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--
Wie im obigen Beispiel beziehen sich die XML-Daten auf die Binärdaten im einschließenden Multipart, indem ein cid
URI-Schema verwendet wird, das eine Kennung für den Content-Id-Header darstellt. Der Overhead dieses Schemas wäre nur der MIME-Header. Ein ähnliches Schema kann auch für die HTTP-Antwort verwendet werden. Natürlich haben Sie im HTTP-Protokoll auch die Möglichkeit, ein mehrteiliges Dokument in separate Anfrage/Antwort zu senden.
Wenn Sie Ihre Daten in einem mehrteiligen vermeiden wollen Verpackung ist Daten URI zu verwenden:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
Aber die base64-Overhead hat.
Genie! Genau wonach ich gesucht habe! –