写点东西,关于XML的

好久没有写博客了。

今天看了一篇文章,说现在很多白领都变成了“橡皮白领”,所谓橡皮白领,来自王朔的小说《橡皮人》(我没看过,呵呵),说是对职业没有了感觉,激情和才情都枯竭了,身心疲惫,却像行尸走肉一样的不停的工作和重复。深感自己也有类似的倾向,害怕也因此坠入其中,成为一个生活和工作的机器,直到有一天,变成了烂肉一堆,毫无用处。

 

于是,写点博客吧,每天让自己的脑子转一下,多和外界有些沟通,才不至于陷入这种困境中。

 

长话短说,说点xml吧。

 

最近再开发mstudio,需要一种更好的界面表示方法,我先后考虑过lua,也考虑过xml。从现有的情况看,还使用xml来描述界面。

xml存在的问题主要是解析困难,所以,希望找到xml针对C++的对象绑定,发现xsd可以。

xml文件除了可以用DTD解释外,还可以使用xml schema来解释。xml schema实际上描述了和xml对应的对象模型。xsd就是把xml schema转换为c++类的工具。不过xml使用了一个xml库,有18M之多,后来我找到了xsd/e,及xsd embbeded版本,这个版本很小。可以实现同样的功能。

 

不过,我还是不想用,因为xsde生成的C++对象,内容很庞杂,生成的文件也很多,和我在guibuilder中使用的libxml没有关系,修改的代码量不少。

另外不喜欢它的风格。

 

我想,既然xml schema可以简单的描述一个对象,那么我们也可以,为何要很复杂的使用xsd/e呢?

 

其实,作起来也不是很负责,xml schema定义了几种基本类型,如整数、字符串、枚举型、日期/时间等。每种类型都可以加限制,如整数可以限制为正整数,或者限制其范围;字符串则可以限制长度、正则表达式限制其格式等。

在基本类型上可以创建合成类型,如数组、序列(按照特定节点顺序排列)等

 

如果我们把每种基本类型对应一个类,如整数类、字符串类等,这些类可以增加限制。用这些信息,去描述一个xml中的节点数据应该如何被解析,如何被判断,然后我再把类的实例对应到一个结构或者类的成员上,或者绑定到成员函数上,那么,就可以完成简单的解析了。

 

例如,一个窗口描述的xml,它有属性caption,x, y, with,和height,要绑定到一个窗口模板上,如

struct {

   string caption;

   int x;

   int y;

   int width;

   int height;

}WindowTemplate;

 

对应的window node有caption, x, y, width和height的属性,则绑定起来,类似这样:

{WindowTemplate::caption,  StringParser("caption",256/*max length*/)},

{WindowTemplate::x, IntPairser("x", 0, 0x7FFFFF/*min & max*/)},

....

 

上面的语法算是伪代码,C和C++的代码写起这种规则来,会比较麻烦,可以自己写些简单的语法,转成对应的C/C++代码。

 

这样,就可以加入对函数的调用了。

 

如果能够写这种代码和C/C++混合代码的话,则可以实现更强大的功能。不过,我好像没有时间作这么多了。先写道这里吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值