具体实现
我给项目起了个名,叫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
protected
List
<
XmlNodousComponent
> list;
|
保存节点列表
|
protected
bool
isSafe =
false
;
|
是否为安全的值,安全的值不包括Xml的敏感字符串
|
protected
XmlElement
parentElement;
|
父级的Element
|
protected
XmlDocument
container;
|
容器
|
protected
string
name;
|
节点名
|
protected
string
value;
|
节点的值
|
public
XmlNodousComponent
Parent {
get
;
set
; }
|
父级节点,公开的属性
|
protected
internal
XmlNodousComponent(
string
name,
string
value)
|
构造函数,要求提供节的名称及节点的值
|
protected
void
Add(
XmlNodousComponent
c)
|
添加节点
|
protected
void
Remove(
XmlNodousComponent
c)
|
删除节点
|
public
void
RemoveAt(
int
index)
|
根据索引删除节点
|
protected
void
Create()
|
创建数据
|
protected
virtual
void
CreateNode()
|
创建具体节点,这个方法其实是Create方法中分离出来的,因为有些节点节点需要重写里面的内容
|
和第二版相比,有了一些变动,把不需要对外使用的字段改为protected的变量。
根节点:XmlNodousRoot
继承于XmlNodousNode和INodousRoot
public
XmlNodousRoot(
string
name)
|
根节的构造函数
|
protected
override
void
CreateNode()
|
重载
|
public
string
NodousToString()
|
返回创建的数据
|
public
new
void
Create()
|
继承于INodousRoot,创建数据,需要注意的是,这个方法有一个new的关键字,因为父类已经有了一个Create方法了,所以这里要用new关键字,要不然就变成重写了
|
这里一定要注意,根节点不是继承于XmlNodousComponent,而是继承于XmlNodousNode,因为在实际操作中,普通节点与根节点是没有差别中,不同的只是普通节点多了Create和NodousToString方法,这样我们可以少写一大堆的重复方法。
普通节点:XmlNodousNode
继承于XmlNodousComponent和INodousNode
protected
internal
XmlNodousNode(
string
name) :
base
(name,
string
.Empty)
|
普通节点的构造函数
|
public
INodousItem
AddItem(
string
name)
|
增加数组节点
|
public
INodousNode
AddNode(
string
name)
|
增加普通节点
|
public
INodousLeaf
AddLeaf(
string
name,
string
value)
|
增加叶子节点
|
public
INodousLeaf
SafeAddLeaf(
string
name,
string
value)
|
增加安全叶子节点
|
数组节点:XmlNodousItem
继承于XmlNodousComponent和INodousItem
protected
internal
XmlNodousItem(
string
name) :
base
(name,
string
.Empty)
|
构造函数
|
public
INodousNode
AddItemNode()
|
添加数组节点
|
非常简单的一个类,就只有一个构造函数和一个和一个添加数组节点的方法
叶子节点:XmlNodousLeaf
继承于XmlNodousComponent和INodousLeaf
protected
internal
XmlNodousLeaf(
string
name,
string
value) :
base
(name, value)
|
构造函数
|
protected
internal
XmlNodousLeaf(
string
name,
string
value,
bool
isSafe)
|
构造函数,加了一个参数isSafe,如果为True的话,将把值写处属性
|
protected
override
void
CreateNode()
|
叶子节点的创建节点和其它节点不一样,所以我们要重写父类的方法
|
注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/
本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/