涂雅[博客园]
最新文章请访问独立博客:http://iove.net
具体实现
         我给项目起了个名,叫Nodous,这个单词很生僻,它是多节的意思,呵,顺便说一个,这个域名在我手里,.Com的,有要的吱个声哈,当然是要给钱的,呵呵,开玩笑哈。
         另外这个版本的命名也有一些变更,希望读者能够适应。
         前两章都没有类图,这章还是先上一个类图吧,有一个感性的认识。
 
         看到这些可爱的棒棒糖(接口)没有,它简直是我们的大救星,我就针对这三张图来描述,我想说完了也就差不多了。
接口类
         我们一共有四个接口,分别是INodousLeaf、INodousNode、INodousRoot、INodousItem,从命名我们就可以看出来,分别对应的叶子节点、普通节点、根节点、数组节点,细心的读者可能会看出来,咦,怎么少了一个数组子节点?没错,数组子节点从本质上来说,和普通节点并没有什么差别,对外的操作接口都是一样的。其实根节点和普通节也没有差别,不过根节点要多了两个方法,一个是Create,另一个是NodousToString。
叶子节点的接口:INodousLeaf
叶子结点的接口很奇怪,它一个空接口,因为它没有对外的方法或属性
普通节点的接口:INodousNode
INodousItem AddItem(string name);
添加数组节点
INodousNode AddNode(string name);
添加普通节点
INodousLeaf AddLeaf(string name, string value);
添加叶子节点
INodousLeaf SafeAddLeaf(string name, string value);
安全添加叶子节点,这是一个很有意思的方法,它与AddLeaf不同的是,它认为value是安全的,不包含敏感字符,主要是针对Xml中使用的,因为我们知道XML对如“&,>”等符号是敏感,如果使用这个方法,叶子节点就被被添加为属性,否则就会被添加为CData结点。
根节点的接口:INodousRoot
string NodousToString();
返回已经创建的数据
void Create();
创建节点数据
 
根节点继承了普通节点INodousNode,包含所有普通节的接口方法
数组节点的接口:INodousItem
INodousNode AddItemNode();
创建数组子节点
 
生成XML的类
类图
         除了抽象类XmlNodousComponent,所有的类都继承于XmlNodousComponent和对应的接口。
         相对于生成JSON的功能,生成XML的功能要简单得多,因为微软已经为我们封装好了操作XML的功能。
抽象类:XmlNodousComponent
protectedList<XmlNodousComponent> list;
保存节点列表
protectedbool isSafe = false;
是否为安全的值,安全的值不包括Xml的敏感字符串
protectedXmlElement parentElement;
父级的Element
protectedXmlDocument container;
容器
protectedstring name;
节点名
protectedstring value;
节点的值
publicXmlNodousComponent Parent { get; set; }
父级节点,公开的属性
protectedinternal XmlNodousComponent(string name, string value)
构造函数,要求提供节的名称及节点的值
protectedvoid Add(XmlNodousComponent c)
添加节点
protectedvoid Remove(XmlNodousComponent c)
删除节点
publicvoid RemoveAt(int index)
根据索引删除节点
protectedvoid Create()
创建数据
protectedvirtualvoid CreateNode()
创建具体节点,这个方法其实是Create方法中分离出来的,因为有些节点节点需要重写里面的内容
 
         和第二版相比,有了一些变动,把不需要对外使用的字段改为protected的变量。
根节点:XmlNodousRoot
继承于XmlNodousNode和INodousRoot
 
public XmlNodousRoot(string name)
根节的构造函数
protectedoverridevoid CreateNode()
重载
publicstring NodousToString()
返回创建的数据
publicnewvoid Create()
继承于INodousRoot,创建数据,需要注意的是,这个方法有一个new的关键字,因为父类已经有了一个Create方法了,所以这里要用new关键字,要不然就变成重写了
 
这里一定要注意,根节点不是继承于XmlNodousComponent,而是继承于XmlNodousNode,因为在实际操作中,普通节点与根节点是没有差别中,不同的只是普通节点多了Create和NodousToString方法,这样我们可以少写一大堆的重复方法。
普通节点:XmlNodousNode
继承于XmlNodousComponent和INodousNode
 
protectedinternal XmlNodousNode(string name) : base(name, string.Empty)
普通节点的构造函数
publicINodousItem AddItem(string name)
增加数组节点
publicINodousNode AddNode(string name)
增加普通节点
publicINodousLeaf AddLeaf(string name, string value)
增加叶子节点
publicINodousLeaf SafeAddLeaf(string name, string value)
增加安全叶子节点
数组节点:XmlNodousItem
继承于XmlNodousComponent和INodousItem
 
protectedinternal XmlNodousItem(string name) : base(name, string.Empty)
构造函数
publicINodousNode AddItemNode()
添加数组节点
非常简单的一个类,就只有一个构造函数和一个和一个添加数组节点的方法
叶子节点:XmlNodousLeaf
继承于XmlNodousComponent和INodousLeaf
 
protectedinternal XmlNodousLeaf(string name, string value) : base(name, value)
构造函数
protectedinternal XmlNodousLeaf(string name, string value, bool isSafe)
构造函数,加了一个参数isSafe,如果为True的话,将把值写处属性
protectedoverridevoid CreateNode()
叶子节点的创建节点和其它节点不一样,所以我们要重写父类的方法
  

注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/

本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/

posted on 2009-01-14 10:10  Conis  阅读(398)  评论(0)    收藏  举报