4.2XML存储结构的设计 本系统的用XML编写存储结构,参照一般的XML编写方法包含以下几个 copyright paper51.com 类:XmlContainer(XmlTree),XmlFile,XmlLeaf,XmlNode,XmlParser。 copyright paper51.com 表1 XmlFile设计表 内容来自www.paper51.com 类名:XmlFile paper51.com
设计用途:用于将一个磁盘上的XML文档以字符串的方式读入到内存中,或者将以字符串方式存于内存中的XML文档输出到磁盘。 内容来自www.paper51.com 方法/属性 内容来自www.paper51.com 作用 http://www.paper51.com string _doc 内容来自论文无忧网 www.paper51.com 保存XML字符串的内部成员变量。 内容来自www.paper51.com
bool load(const char* file) http://www.paper51.com 将参数file指定的文件载入类的成员变量doc中。 内容来自www.paper51.com bool save(const char* file) 内容来自www.paper51.com 将成员变量doc的值保存到file指定的文件中。 copyright paper51.com
const string& getdoc() 内容来自论文无忧网 www.paper51.com
返回doc的值。 内容来自www.paper51.com
bool setdoc(const string& _doc) 内容来自www.paper51.com 以_doc设置doc的值。 copyright paper51.com 表2 Xmlparser设计表 内容来自www.paper51.com 类名:XmlParser paper51.com 设计用途:用于实现XmlTree和字符串化的XML文档的相互转换。 内容来自www.paper51.com 方法/属性 内容来自www.paper51.com 作用 内容来自论文无忧网 www.paper51.com static XmlTree* doc2tree(const string& doc) copyright paper51.com 将doc转换成一个XmlTree。 http://www.paper51.com
static string tree2doc(XmlTree* pXmlTree) paper51.com 将一个XmlTree转换为字符串。 http://www.paper51.com static int gettoken(string strDoc, string& token) 内容来自www.paper51.com 从strDoc中获取第一个标记(或者值) paper51.com 说明:正是通过这两个类的协作,实现了XML文档的读写和转换。例如: http://www.paper51.com XmlFile file; http://www.paper51.com if(!file.load("Settings\\items.xml")) http://www.paper51.com { paper51.com
AfxMessageBox("打开数据文件items.xml失败"); 内容来自论文无忧网 www.paper51.com return; copyright paper51.com } paper51.com
XmlTree*pTree = XmlParser::doc2tree(file.getdoc()); http://www.paper51.com if(!pTree) 内容来自论文无忧网 www.paper51.com { paper51.com AfxMessageBox("转换数据文件items.xml失败"); 内容来自论文无忧网 www.paper51.com return; paper51.com } paper51.com 上面的代码段首先使用XmlFile的实例load了一个XML文档,然后使用XmlParser::doc2tree创建了一个XmlTree,从而为内存中使用XML提供了基础。 http://www.paper51.com 下面说明一下对XML的处理方案。使用树型结构表达XML文档,可以比较方便的进行相应的读写删改操作。因为XML本身就是一个数型的结构。例如: 内容来自论文无忧网 www.paper51.com <DATA> http://www.paper51.com
<item> copyright paper51.com <name>tttttt</name> paper51.com <catalogs>13</catalogs> http://www.paper51.com <path>d</path> copyright paper51.com </item> http://www.paper51.com <item> http://www.paper51.com <name>xx</name> copyright paper51.com <catalogs>7</catalogs> 内容来自论文无忧网 www.paper51.com
<path>xx</path> 内容来自论文无忧网 www.paper51.com
</item> http://www.paper51.com </DATA> 内容来自www.paper51.com 以上是一段程序中用到的XML文档结构。注意到整个文档以<DATA>开始,以</DATA>结尾,表示之间的都是存储的数据(实际上就是资源的属性数据)。中间共有两个item,而每个item又各有几个属性(如<name>,<catalogs>等)。所以可以用一颗树来表示: 内容来自www.paper51.com
图2 Xml树型结构图 paper51.com 注意到上面的树中有些节点只有Name没有Value,而有些却都有。虽然它们都是节点,但类型上还是有区别的。故,采用三个类表达这种信息:XmlNode,XmlLeaf,XmlContainer。 http://www.paper51.com 首先定义一个接口类XmlNode,该类表达抽象的XML节点。然后使用XmlLeaf类和XmlContainer类来实现XmlNode,XmlLeaf表示叶节点(有Name和Value双重属性的节点,但自己没有子节点),XmlContainer表示容器节点(只有Name属性的节点,而且自己可以有子节点)。 paper51.com |