Vanilla Sky

   相信自己,但不可自以为是
          重视自己,但不可目中无人
        最近正在做的一个项目中,要用XML写一个项目的配置文件,便将XML拾起加温习了一下。以前做过配置菜单目录的应用,这次有点小不同,需要配置整个项目的运行流程,这就要求除了在文件中记录每一个模块的功能,更能模块根据不同的参数,要跳转到相应的地方,因此,还要记录其跳转与接口参数,同时,还要具有灵活的可配置性,即插入、删除与流程更新都要简单可行。在这仅跟大家share一下这次温习的心得^_^
         XML代表EXtensible Markup Language(可扩展标记语言),它用于描述数据,侧重于数据本身(如数据本身和数据结构)的定义。
         XML的语法非常简单,属于自述性质的语法。如
<?xml version="1.0" encoding="gb2312"?>
<root>
 <author name="Tom"location="UK">Tom
  <address>Room 101</address>
 </author>
 <author name="Bill" location="America">Bill
 </author>
</root>  
   文档的第一行是XML的声明,定义XML的版本和所用字体的编码,本例中XML的版本为1.0,字体编码为“gb2312”,该编码可显示中文,当然你也可以用“ISO-8859-1”等来编码。
   文档的第二行是XML的根节点,描述文档的根元素。XML文档必须有一个根节点。
<root>

   接下来描述了root的子元素<author>。同时,描述了author的属性值name,location。属性值必须用引号引起来。
<author name="Tom" location="UK">


   在XML里,必须有结束标签,如</root>,每对标签必须正确套嵌。于HTML不同的是,XML里区分大小写,因此,<root>和</Root>不能被认为是正确的套嵌。

   为了达到配置灵活的目的,我在XML文件中采用了链表的数据结构。在文件中,我用一个<next>节点来模拟指针操作。首先,在功能节点的属性中,设置该节点的唯一ID属性,而<next>节点的元素则指示下一步将要到达的节点的ID。

<language state="language" id="1" file="D:/data">××功能模块
       <next dtmf="1">2</next>
       <next dtmf="2">13</next>
    </language>
    <locate state="locate" id="2" file="D:/data">××功能模块
       <next dtmf="">3</next>
    </locate>

上例中说明的是,在language节点中,如果dtmf条件满足“1”,则接下来执行locate功能模块,如果满足“2”,则执行id为13的功能模块。
    如果需要执行插入或删除功能模块操作,则在相应位置插入或删除节点后,将其前驱节点的next值和其next值修改即可。如果需要修改程序执行流程,则只需修改个节点的next值,使其前驱与后继相应,便可实现。
    自我感觉在程序封装时,该方法还是比较容易实现,把XML文件解析出来,再加上合理设计数据结构,实现时就不存在什么难题。同时,利用链表的优点,使得插入、删除与重整都相对容易与灵活。
posted on 2007-04-03 14:26  幽儿  阅读(182)  评论(0编辑  收藏  举报