问题

我有两个用Java编写的应用程序,它们通过网络使用XML消息相互通信。我在接收端使用SAX解析器从消息中取回数据。其中一个要求是在XML消息中嵌入二进制数据,但SAX不喜欢这样。有谁知道如何做到这一点?

更新:我使用了apache commons codec libraryBase64类,以防其他人尝试类似的东西。


#1 热门回答(196 赞)

你可以使用base64对二进制数据进行编码,并将其放入Base64元素中;以下文章是关于这个主题的非常好的文章。
Handling Binary Data in XML Documents


#2 热门回答(190 赞)

XML非常通用......

<DATA>
  <BINARY>
    <BIT index="0">0</BIT>
    <BIT index="1">0</BIT>
    <BIT index="2">1</BIT>
    ...
    <BIT index="n">1</BIT>
  </BINARY>
</DATA>

XML就像暴力 - 如果它没有解决你的问题,你就没有使用它。

编辑:

BTW:Base64 CDATA可能是最好的解决方案

(EDIT2:
无论谁对我进行调整,请同时提出真正的答案。我们不希望任何可怜的灵魂来到这里并实际实施我的方法因为它在SO上排名最高,对吗?)


#3 热门回答(22 赞)

Base64确实是正确的答案,但CDATA不是,这基本上是说:"这可能是任何东西",但它必须是而不是才是任何东西,它必须是Base64编码的二进制数据。 XML Schema定义了Base 64 binary as a primitive datatype,你可以在xsd中使用它。


原文链接