在XML中发送二进制数据

开发者在线 Builder.com.cn 更新时间:2002-12-04作者:BUILDER.COM 来源:

本文关键词: xml

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

问题:

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

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

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

解决办法:

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

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

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

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

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

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

用户评论

  • 用户名
  • 评论内容