Jeśli masz kontrolę nad formatem XML, powinieneś odwrócić problem na drugą stronę. Zamiast dołączać binarny plik XML, powinieneś pomyśleć o tym, jak załączyć dokument, który ma wiele części, z których jedna zawiera XML.
Tradycyjnym rozwiązaniem jest archiwum (np. Tar). Ale jeśli chcesz zachować załączony dokument w formacie tekstowym lub jeśli nie masz dostępu do biblioteki archiwizującej pliki, istnieje również ustandaryzowany schemat, który jest często używany w wiadomościach e-mail i HTTP, który jest wieloczęściowy / * MIME z Content-Transfer-Encoding: binarny .
Na przykład, jeśli Twoje serwery komunikują się przez HTTP i chcesz wysłać dokument wieloczęściowy, z których podstawowym jest dokument XML, który odnosi się do danych binarnych, komunikacja HTTP może wyglądać mniej więcej tak:
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--
Jak w powyższym przykładzie, XML odwołuje się do danych binarnych w otaczającym go wieloczęściowym przy użyciu cid
schematu URI, który jest identyfikatorem nagłówka Content-Id. Narzut tego schematu byłby tylko nagłówkiem MIME. Podobny schemat można również zastosować do odpowiedzi HTTP. Oczywiście w protokole HTTP masz również możliwość wysłania wieloczęściowego dokumentu w osobnym żądaniu / odpowiedzi.
Jeśli chcesz uniknąć zawijania danych w wieloczęściowy, użyj identyfikatora URI danych:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
Ale to ma narzut na base64.