Если у вас есть контроль над форматом XML, вы должны вывернуть проблему наизнанку. Вместо того, чтобы прикреплять двоичный 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 ссылается на двоичные данные во включающем multipart с помощью cid
схемы URI, которая является идентификатором заголовка Content-Id. Накладные расходы этой схемы будут только заголовком MIME. Похожая схема также может использоваться для HTTP-ответа. Конечно, в протоколе HTTP у вас также есть возможность отправить составной документ в отдельный запрос / ответ.
Если вы хотите избежать упаковки данных в составную часть, следует использовать URI данных:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
Но это накладные расходы base64.