揭晓XML文件之谜
来源:广州中睿信息技术有限公司
发布时间:2012/10/21 23:25:16 编辑:itlead 阅读 1958

  动机

  网游服务器端开发过程中,很多控制游戏的参数都不应该直接硬编码的。需要各种各样的配置和脚本文件,好处:

  1.可以由策划或数值去随意修改,而不用动程序代码

  2.配置可以动态加载,可以动态改变服务器运行中的参数,对已经发布的功能进行调整

  一般情况下,可采用:

  1.ini配置,一般用于window下的软件,游戏客户端有时会用到。比较简单,功能有限。

  2.Excel表格,数值策划特别喜欢用这个,可以做很多运算,生成数值,可以用VBA做更多的事情。

  3.xml配置,对于层次比较深、结构比较复杂的数据,应该算最佳选择了。

  XML(eXtensible Markup Language)是一种标记语言,用于说明数据是什么,以及携带数据信息。主要用于:

  1.丰富文件(Rich Documents):自定文件描述并使其更丰富

  2.元数据(Metadata):描述其它文件

  3.配置文件(Configuration Files):设定应用程序的参数

  下面主要介绍一下对于xml文件作为服务器配置时候的解析方案。


  问题

  解析下面的XML文件:

  

  •node1 – 整个xml文件里面只有一个该节点   

        •node2 – 有多个并且id属性可以作为它的键值,称之为节点map  

     •node3 – 有多个名为node3的节点,但没有键值,称之为节点vector

 

  一般的解决方案

 

  使用XMLPaser(用libxml2封装的一个解析器)来解析(TinyXML也类似,DOM方式的都大同小异):

  

  // 解析node1的prop1和prop2属性  

           

       // 解析node2节点map  

       

 

  坏味道分析

  上面的代码,有几点不足之处,列举如下:

  1.代码重复   

        整个解析过程大同小异,一步一步遍历加载在内存中的节点树   

        节点或节点属性的名称、节点的层次结构不同的时候,就得写不同的代码,一般会采用复制代码的方式   

        2.使用不便   

        往往要写一个单件管理器,在服务器启动的时候加载该配置,然后在管理器里面把需要的数据结构都定义好  

     使用的时候,引用管理器里面的成员变量,代码既丑陋又容易出错   

        3.不安全   

        节点名称、属性名称都是字符串,拼错了,运行时会发生逻辑错误