作者: 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文档可以成功的包含数据,而不仅仅是文本。

转载于:https://www.cnblogs.com/silva/archive/2005/07/07/188038.html

在XML中发送二进制数据相关推荐

  1. android 上传文件到 c 服务器,android 怎么样用socket给C服务器 发送二进制数据

    最近在写一个小APP,卡在android与服务器端通讯上了,大致需求是,android端发送二进制数据,文件头为0x00 0x08 0x0b,后面跟字符串的内容为abcd_efdgh, 结尾用0x00 ...

  2. 在 Web 数据控件中显示二进制数据54

    简介 前面的教程中 , 我们介绍了将二进制数据与应用程序的基础数据模型相关联的两种方法 , 并使用FileUpload 控件从浏览器向 Web 服务器的文件系统上载.我们还将了解怎样将上载的二进制数据 ...

  3. matlab 十六进制数组,【MATLAB】MATLAB中读取二进制数据文件并加入到矩阵中

    MATLAB中读取二进制数据文件并加入到矩阵中的应用如下: 如果对c语言十分熟悉的话,应该对fopen,fclose,ftell,fseek,fread,fwrite,feof 这些函数非常熟悉了,在 ...

  4. java json转二进制数据_JSON字符串中的二进制数据 . 比Base64更好的东西

    UTF-8的问题在于它不是最节省空间的编码 . 此外,一些随机二进制字节序列是无效的UTF-8编码 . 因此,您不能将随机二进制字节序列解释为某些UTF-8数据,因为它将是无效的UTF-8编码 . 这 ...

  5. sql语句中插入二进制数据

    保存二进制数据 这段代码是将数据库中的二进制数据取出插入 保存图片 这段代码是将页面上的图片存入数据库 总之,Sql Server重罚插入二进制数据SqlParameter这个东西.

  6. Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)

    前言 一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于SignalR Core的文章了. 先介绍一下SignalR吧,如下: ASP.NET S ...

  7. jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)

    jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...

  8. [ActionScript 3.0] AS向php发送二进制数据方法之——在URLRequest中构造HTTP协议发送数据...

    主类 HTTPSendPHP.as 1 package 2 { 3 import com.JPEGEncoder.JPGEncoder; 4 import com.fylib.httpRequest. ...

  9. QT接收或发送二进制数据(或数据内包含0)

    一般情况下,我们都是采用0作为字符串的结尾,对于初步接触这部分内容的朋友来说是比较复杂的.首先,我们从编译器分配内存开始了解: 当我们调用malloc或new相关函数分配内存时,编译器在分配出的地址( ...

最新文章

  1. sql server insert 锁表_SQL简单优化
  2. FastCGI - Getting Request URI and Content in C++ FCGI
  3. 基本的SVG样式属性
  4. 我一个弱女子在欧洲大街上拉屎了,因为便秘惹的祸
  5. 如何解决 Nginx 端口映射到外网后访问地址端口丢失的问题
  6. redis php高级使用_项目中应用Redis+Php的场景
  7. 国内Maven仓库--阿里云Aliyun仓库地址及设置
  8. MyBatis学习总结[5]-动态 SQL
  9. 算法64-荷兰国旗问题
  10. 【文献阅读】医学图像分割中的loss函数选择-Loss odyssey in medical image segmentation loss
  11. codewhy_vue笔记01
  12. 微信公众号点击列表进入详情页
  13. 计算机机房线槽,机房机柜布置 机房整改之布线篇~
  14. 学计算机买笔记本是i5 i7,为什么懂电脑的人选择买i5处理器, 而不是i7, 背后是什么原因?...
  15. 中国信通院的星火链主链支持与以太链(测试网)交互
  16. 普通交换机能否改成PoE供电的?
  17. post_thumbnail_html,WordPress 常用函数 / the_post_thumbnail
  18. U盘加密软件怎么选?
  19. python 解析类似 ‘\xe4\xb8\xad\xe5\x9b\xbd‘的unicode码为汉字
  20. ESP8266-Arduino编程实例-MMA8451加速度计驱动

热门文章

  1. Spring中ref local与ref bean区别
  2. Discuz在线升级中的SC和TC分别是什么意思?
  3. 自定义listview
  4. 拖拖拽拽画JAVA报表?
  5. Cloudify — REST Plugin
  6. DPDK — RTE_LOG 日志模块
  7. Openstack组件部署 — keystone(domain, projects, users, and roles)
  8. 1.2、什么是函数?什么是方法
  9. ajax和promise的结合使用
  10. 《自写原创程序,让vim运行c/c++》