Se hai il controllo sul formato XML, dovresti capovolgere il problema. Piuttosto che allegare l'XML binario, dovresti pensare a come racchiudere un documento che ha più parti, una delle quali contiene XML.
La soluzione tradizionale a questo è un archivio (ad esempio tar). Ma se vuoi mantenere il tuo documento allegato in un formato basato su testo o se non hai accesso a una libreria di archiviazione di file, c'è anche uno schema standardizzato che viene utilizzato pesantemente nelle e-mail e HTTP che è multipart / * MIME con Content-Transfer-Encoding: binario .
Ad esempio, se i tuoi server comunicano tramite HTTP e desideri inviare un documento in più parti, il principale è un documento XML che fa riferimento a dati binari, la comunicazione HTTP potrebbe essere simile a questa:
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--
Come nell'esempio precedente, l'XML fa riferimento ai dati binari nella multiparte che lo racchiude utilizzando uno cid
schema URI che è un identificatore dell'intestazione Content-Id. Il sovraccarico di questo schema sarebbe solo l'intestazione MIME. Uno schema simile può essere utilizzato anche per la risposta HTTP. Ovviamente nel protocollo HTTP, hai anche la possibilità di inviare un documento multiparte in una richiesta / risposta separata.
Se vuoi evitare di racchiudere i tuoi dati in una multiparte, devi usare l'URI dei dati:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
Ma questo ha l'overhead base64.