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