现在的位置: 首页 > 综合 > 正文

在XML中发送二进制数据

2011年02月01日 ⁄ 综合 ⁄ 共 1250字 ⁄ 字号 评论关闭
作者: BUILDER.COM

XML通常被认为是用文本来描述数据的一种方法。例如,元素给出了文本名,元素的内容通常是基于文本的。但是有时候你需要输入数据而不是文本到你的XML文档。让我们来考虑你可能的选择。

问题:

你可能认为你可以仅仅把一些二进制数据放入开始和结束的标签里,而且你也这么做了。但不幸的是,这会引发一些潜在的问题:

  • 在XML中,新的一行和空格符将会把二进制数据搅乱。
  • 二进制数据可能包含空字符。
  • 二进制数据可能包含</序列。

这些问题不仅影响了二进制数据,而且影响了XML分析。如果分析器不能判定在计算什么,你将不能得到任何数据。如果数据被分析器“格式化”了,你将不能再正确地处理这些二进制数据。

解决办法:

现在至少有三个办法来解决这个问题:

  • 使用CDATA标签,直接将二进制数据嵌入到XML文档中。
  • 使用URL来查阅二进制数据。
  • 将二进制数据编码为一个基于文本的格式,以使它可以作为一个XML元素的内容。
二进制的嵌入:

如果你选择了把二进制数据嵌入XML文档,你就不必从一个远程资源那里拖来一个文件,也不必在使用前把它解码。这些数据可以立即使用。

使用这种方法就要用到XML CDATA标签,XML CDATA标签对于处理不在XML过程中分析的数据来说是一个特殊的标签。本质上,你是用了一组开始和结束标签来指出二进制数据开始和结束的位置。这个包含了CDATA的元素的值就是该二进制数据。

正如你所见到的,CDATA标签把字符串 <![CDATA[ 作为开始标签,并且把字符串]]> 作为结束标签来使用。XML分析器忽略这两个标签之间的一切数据。

不幸的是,这个方法有一些问题。首先,你可能会发现XML文档,分析器,以及你的二进制数据里使用的符号集是有问题的。其次,你的二进制数据可能含有]]>串。这个序列将会告诉XML分析器截止到哪里是不需要分析的数据,即使它并不真的是二进制数据的结尾——这就是混乱的情况。

二进制的查阅:

最简单的解决办法很可能是把这个二进制文件放到一个已联网的服务器上,然后仅需用URL查阅它就可以了。使用这样的查阅方式使你无需再担心给文件编码或在网络上传送庞大的文件和XML。这种方法还使你可以动态的升级文件,而不必发送一个新的XML文档。

二进制的编码:

你还可以从为数不多的把二进制数据编码为文本数据的方法中选择一个。本质上,这样的处理过程将二进制字节通过一个相对简单的算法转换成了ASCII字节。两个最常用的二进制编码算法是UU编码和base64编码。

一个称为MIME的二进制编码的扩展版本将被编码文件的信息添加进去,比如文件名。编码程序作为共享软件和编程工具是很容易找到的。

除了文本数据之外,在很多情况下,把其他类型的数据输入到XML文件也是很有用的。但是这并不象直接把数据放入一组开始和结束标签那么简单,因为把数据放入开始和结束标签会导致数据和XML分析都出问题。幸而你可以使用这三种解决办法之一——二进制的嵌入、二进制的查阅、二进制的编码——使你的XML文档可以成功的包含数据,而不仅仅是文本。

抱歉!评论已关闭.