Se você tem controle sobre o formato XML, deve virar o problema do avesso. Em vez de anexar o XML binário, você deve pensar em como incluir um documento que possui várias partes, uma das quais contém XML.
A solução tradicional para isso é um arquivo (por exemplo, tar). Mas se você deseja manter o seu documento anexo em um formato baseado em texto ou se você não tem acesso a uma biblioteca de arquivamento de arquivos, há também um esquema padronizado que é muito usado em e-mail e HTTP que é multipart / * MIME com Codificação de transferência de conteúdo: binário .
Por exemplo, se seus servidores se comunicam por meio de HTTP e você deseja enviar um documento multipartes, sendo o principal um documento XML que se refere a dados binários, a comunicação HTTP pode ter a seguinte aparência:
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--
Como no exemplo acima, o XML se refere aos dados binários na multiparte envolvente usando um cid
esquema de URI que é um identificador para o cabeçalho Content-Id. A sobrecarga desse esquema seria apenas o cabeçalho MIME. Um esquema semelhante também pode ser usado para resposta HTTP. Obviamente, no protocolo HTTP, você também tem a opção de enviar um documento multiparte em solicitação / resposta separada.
Se você deseja evitar agrupar seus dados em uma multiparte, use o URI de dados:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
Mas isso tem a sobrecarga de base64.