怎么做一个xml的编辑器?

skdkfssd 发布于 2009/08/06 23:37
阅读 1K+
收藏 0

数据结构作业,5000,希望神人牛人高人前辈指点一下,给点思路或学习资料,我是想自己完成。

 

() XML文档存取类库与编辑器的设计和实现及应用

1.问题陈述

以广州市的政治、经济、文化、工业、农业、服务、贸易、旅游、教育、科学、公安、医疗、卫生、建筑、工商、历史、地理、环境、银行、交通、餐饮等行业中的某一个行业为应用背景,设计一个关于XML文档存取的类库,并在此基础上给出一个XML文档的交互式编辑器。

2.基本要求

内部要求XML文档可一次全部读入内存后处理。按树的方式处理XML文档。至少设置文档类、XML元素类等。提供基本的树结构访问接口。对XML文档的一切其它操作(如编辑器功能)都要求在类库的基础上进行;

外部功能:

类库功能:具体的功能要求参阅后面的“设计提示”;

编辑器功能:在非Windows(MS, X系列)环境下建立一个小型的全屏幕编辑器,支持以树的形式编辑XML文档。

具体的功能包括:

修改:修改任一成份(文本、标签、属性等)的内容;

插入:在当前位置上插入对应的成份(元素、文本、属性等);

删除:删除当前位置上的对应的成份(元素、文本、属性等);查找功能:可按属性值、标签名、文本内容定位;

文件操作支持创建新文档(空)、文档保存(到磁盘)、读磁盘文档等

编辑交互支持简单的字符模式的菜单、对话框;

3.增强要求

内部要求XML文档很大时,不一次全部读入内存,而采用动态分块读入;

外部功能:更完善的类库功能和编辑器功能。

4.扩展要求

外部功能:支持比较友好的菜单、对话框等屏幕元素,支持鼠标、中文(自建中文系统)。

5.设计提示

A)对象体系 (见图1

B)类形式参考

(1) 树结点类TTreeNode: 多叉树结点,其仅与树结构有关。其它种类结点均由此结点派生。主要包括下列成员:

Generation:整数,为本元素在所在树中的层号(根层号为1);

ParentxiTreeNode型,读写型,指出该结点在树中的父结点;

ChildrenxiTreeNodeList型,指出该结点在树中的各个儿子;

(2) 标记(标签)类:该类由TTreeNode派生而来,描述文档树中的标记,即一对尖括号之间的部分。

主要包括下列成员:

NameXAM字串型,是标记的名称;

AttrList:属性表型,是标记对应的各属性构成的集合(表);

Type:枚举型,为标记的类型,即指出是非空标记还是空标记;

(3) XML元素类xiElement           用于描述XML文档中的元素,它代表某一完整元素,包括该元素的下属的各元素,因此相当于一棵(子)树。提供了对子树的各种访问方法。

主要包括下列成员:

Root:根指示器;

Content:元素内容;

ClusterDescendants(travModestartLevel endLevelelemNameattrNameattrValueelemText):遍历结果存引用集的条件遍历,即本元素的各指定的直系后代(儿子,及儿子的后代),按指定的次序,组成一个引用集。

ClusterAncestors(startLevelendLevelelemNameattrNameattrValueelemText):将本元素的各指定的直系前辈(父亲及父亲的前辈),组成一个引用集。

ClusterJuniors(travModestartLevelendLevelelemNameattrNameattrValueelemText) 类似于ClusterDescendants,不同之处是,ClusterDescendants涉及的元素是本对象的各直系后代(儿子,及儿子的后代),而ClusterJuniors涉及的是本对象的所有后代(层号大于本对象的各元素)。另外,这里的遍历次序是按从树根开始的;

ClusterSeniors(travModestartLevelendLevelelemNameattrNameattrValueelemText):类似于ClusterAncestors,不同之处是,ClusterAncestors涉及的元素是本对象的各直系前辈(父亲及父亲的前辈),而ClusterSeniors涉及的是本对象的所有前辈(层号小于本对象的各元素)。另外,这里的遍历次序是按从树根开始的;

ClusterCousins (elemNameattrNameattrValue="*"elemText="*"):将本元素的各指定的兄弟及堂兄弟,组成一个引用集;

ClusterAttribute(fieldDelimitertravModestartLevelendLevelelemNameattrName) 按指定的方式遍历本元素对应的子树,将遍历到的元素的属性名与值存入一个新引用集;

ClusterText(travModestartLevelendLevelelemNameattrNameattrValue):按指定的方式遍历本元素对应的子树,将遍历到的元素对应的文本存入一个新引用集;

Insert(elembeforeNo):为本元素插入一棵子树(元素);

Delete(idxSelector):删除本元素的若干棵子树(元素);

Replace(idxSelector, elem):用给定的元素替换本元素中的指定元素;

SaveAsXMLDocFile(docFile):将本元素(含其各子元素)读出,转换为标准的XML格式,存入指定的文件中;

SaveAsXMLDoc(in xiXMLStr docStr):将本元素(含其各子元素)读出,转换为标准的XML格式,存入指定的字符串中;

LoadFromXMLDocFile(docFile):将指定的XML文档文件读出,将其转换为一个xiElement型元素,代替本元素:

LoadFromXMLDoc(docStr):将指定的XML文档字符串转换为一个xiElement型元素,代替本元素;

加载中
返回顶部
顶部