在现代编程实践中,数据的高效传输变得越来越重要,尤其是在移动设备和网络带宽受限的环境中。XML(可扩展标记语言)是一种广泛使用的数据格式,它易于理解、解析和使用。然而,XML在数据传输方面的效率并不高。例如,一个简单的"Hello, World!"消息,如果使用XML格式,可能需要传输超过200字节的数据,而实际有意义的信息只有两个字符串。在局域网(LAN)环境中,这可能不是问题,但在移动通信环境中,这种低效率就变得非常关键。这就是为什么WAP二进制XML(WBXML)被发明出来的原因。
WBXML通过使用名称表(标记)将节点和属性转换为一个字节值,从而节省了大量不必要的传输信息。WBXML的规范非常简单,但.NET(甚至是Compact框架)缺乏对这种内容格式的支持。
那么,是否有必要学习和使用WBXML呢?这是一个棘手的问题。一方面,所有的移动内容提供商(包括那些处理移动同步的提供商)广泛使用这种格式。另一方面,如果不是真正“在”移动(或任何其他带宽高效)编程领域,并不需要它。
认为,编程(总体上)中最重要的事情之一是效率,所以决定编写一个派生自XmlDocument的类,以提供WBXML支持。
首先创建名称表(如果只使用一个标记,就不必这样做):
Dictionary> tokens = new Dictionary>();
Dictionary token = new Dictionary();
token.Add(1, "hello-world");
token.Add(2, "greeter");
token.Add(3, "greeting");
tokens.Add(1, token);
然后使用这些表创建一个新的WBXmlDocument实例:
System.Xml.WBXmlDocument doc = new System.Xml.WBXmlDocument(tokens);
现在可以像使用普通的XmlDocument一样使用它...
doc.LoadXml("WBXML Programmer Hello, World! ");
...然后创建它的二进制表示:
byte[] bytes = doc.GetBytes();
或者加载传入的字节数组...
doc.Load(bytes);
...然后获取XmlDocument:
string xml = doc.DocumentElement.OuterXml;
就是这么简单,不是吗?