/XmlTree

A c++ class to store the data with tree structure that stored in xml

Primary LanguageC++


                                                     #介绍

xml_tree是一个用来存储树形结构数据的类,用以解决xml文件对树形结构的数据操作效率不高的问题。


													#用到的文件

xml_tree.hpp --代码 xml_name.xml --存放数据结构的xml文件 xml_val.xml --存放数据的xml文件 rapidxml folder --读取上述的xml文件


                                                     #细节

一般来说,如果一个工程要实现代码与数据无关,我们会将数据写到一个xml文件里,通过代码读取xml 内容的方式来实现。但是,对于具备树形结构的数据来说,存放在xml文件的使用效率并不高,尤其是当 数据操作与节点有关的时候。 下面通过一个例子具体说明上述操作xml文件与xml_tree的区别:


                    #数据结构

(school->class->student->height) ->weight)


					#xml文件存储格式

ABleo 170 50

ABneo 165 50


					#xml_tree存储格式

                           school ---(A, (1, 2))
                               |
                           class ---(B, (1, 2))
                               |
                         student ---(leo, (1)), (neo, (2))
 |                                                |

height ---(170 (1)) ,(165(2)) weight ---(50 (1, 2)) 说明: (A, (1,2)) 代表A数据,拥有A的record id有(1, 2)


                    #数据操作

(1)查询记录1的数据 xml: 用id直接查询 xml_tree: 用id直接查询

(2)统计身高大于170的同学人数: xml: 1.遍历所有record 2.找到school节点 3.找到class节点 4.找到student节点 5.找到height节点,统计其身高是否大于170 xml_tree: 1.跳到height节点 2.遍历height的所有数据,统计其身高是否大于170


                            对比

(1)操作1中xml与xml_tree都是链表操作,效率相近

(2)操作2中xml与xml_tree的区别就在于xml的每条record 都是并行存放的,而xml_tree将record拆成每个节点来存放, 因此当需要对某个节点进行数据分析时(如上述对身高的分析), xml需要遍历record找到那个节点才能进行操作,而xml_tree 可以直接跳到那个节点进行操作,在效率上更高

(3)除了上述区别,xml_tree与xml还有以下区别:

1.xml中存放的数据都是字符串类型,在每次使用时需要先 进行一次数据转换,xml_tree存放的即是数据类型

2.xml的每一条record都要满足树的结构,因此如果数的结构 改变了,所有的record结构都要改变,改动较大。而xml_tree 是先用xml_name.xml建立好数的结构,再用xml_val.xml并行 设置节点,因此数的结构只需修改xml_name而不需要修改 xml_val