当前位置:  开发笔记 > 编程语言 > 正文

如何在XML中嵌入二进制数据?

如何解决《如何在XML中嵌入二进制数据?》经验,为你挑选了6个好方法。

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

更新:我使用apache commons编解码器库中的Base64类,以防其他人尝试类似的东西.



1> Greg Hurlman..:

您可以使用base64对二进制数据进行编码,并将其放入Base64元素中; 以下文章是关于这个主题的非常好的文章.

处理XML文档中的二进制数据



2> Mo...:

XML是如此多才多艺......


  
    0
    0
    1
    ...
    1
  

XML就像暴力 - 如果它不能解决您的问题,那么您就没有使用它.

编辑:

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

(编辑方式2:
无论是谁给我打电话,也请提出真正的答案.我们不希望任何可怜的灵魂来到这里并实际实施我的方法,因为它在SO上排名最高,对吗?)


哦,为了f***的缘故.这是一个笑话.我做了什么?!:http://thedailywtf.com/Articles/The-HumanReadable-Encryption-Key.aspx
如果你是认真的话,这绝对是对XML的完全不光彩的使用.如果你不是,那些不写高级别思考低级别的初学者怎么会知道呢?
我不认为它具有足够的描述性 - 也许应该使用'BINARYDIGIT'而不是收缩'BIT'?;-)

3> Boris Terzic..:

Base64确实是正确的答案,但CDATA不是,基本上说:"这可能是任何东西",但它不能只是任何东西,它必须是Base64编码的二进制数据.XML Schema将Base 64二进制文件定义为可在xsd中使用的基本数据类型.


提到`xs:base64Binary`数据类型的额外点,这是正确的类型.

4> 小智..:

上周我遇到了这个问题.我不得不序列化一个PDF文件并将其在XML文件中发送到服务器.

如果您使用的是.NET,则可以将二进制文件直接转换为base64字符串并将其粘贴到XML元素中.

string base64 = Convert.ToBase64String(File.ReadAllBytes(fileName));

或者,在XmlWriter对象中内置了一个方法.在我的特定情况下,我必须包含Microsoft的数据类型名称空间:

StringBuilder sb = new StringBuilder();
System.Xml.XmlWriter xw = XmlWriter.Create(sb);
xw.WriteStartElement("doc");
xw.WriteStartElement("serialized_binary");
xw.WriteAttributeString("types", "dt", "urn:schemas-microsoft-com:datatypes", "bin.base64");
byte[] b = File.ReadAllBytes(fileName);
xw.WriteBase64(b, 0, b.Length);
xw.WriteEndElement();
xw.WriteEndElement();
string abc = sb.ToString();

字符串abc看起来像这样:



    
        JVBERi0xLjMKJaqrrK0KNCAwIG9iago8PCAvVHlwZSAvSW5mbw...(plus lots more)
    



5> Anders Sandv..:

我通常使用MIME Base64或URL编码对二进制数据进行编码.



6> basszero..:

尝试Base64编码/解码二进制数据.另请参阅CDATA部分

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有