my_xml.~h
上传用户:wangli
上传日期:2008-04-19
资源大小:3077k
文件大小:4k
- /*
- 这是我写的一个xml文件类,封装了 IXMLDocument,用于在c++builder程序中
- 建立、读写xml文件,经过一年多的修改和使用,感觉还行。
- 作者:lao-hong
- */
- //下面是"my_xml.h"的内容: (用到了STL)
- //---------------------------------------------------------------------------
- //2003-1-26
- #ifndef my_xmlH
- #define my_xmlH
- #include <XMLDoc.hpp>
- #include <map.h>
- #include <vector.h>
- //---------------------------------------------------------------------------
- class xmlNode; //表征xml节点的类,
- //因为与 myXML 有交叉引用,所以在此预先定义一下。
- //---------------------------------------------------------------------------
- class myXML //xml文件类.
- {
- private:
- int SavePause; //用来控制防止频繁的存盘,提高效率。
- private:
- AnsiString _fpath; //xml文件名,包含路径。
- _di_IXMLDocument XmlDoc; //cb中的xml文档类。
- _di_IXMLNode Root; //根节点,只有一个。
- public:
- myXML(); //构造函数
- myXML(AnsiString fpath); //构造函数
- void init(AnsiString fpath); //初始化
- bool isNull()const; //是否有效
- void save()const; //存盘
- xmlNode root()const; //获得根节点
- void disable_save(); //该函数使后面的save()操作无效。
- void enable_save(); //执行save()操作。
- //这两个函数总是成对出现,用于使两个函数之间的大量
- //零碎的存盘操作(如果有的话)被跳过,以提高系统效率。
- //这两个函数是我后来加的,与XML文档没有关系,
- //如果你觉得没有必要,可以去掉。
- void save_to( AnsiString fpath_ )const; //保存到另外的文件
- };
- //---------------------------------------------------------------------------
- typedef map<AnsiString,AnsiString> attrMap; //用来表示节点的一组属性
- //定义这个可以少打好多字。
- //---------------------------------------------------------------------------
- class xmlNode //表征xml节点的类,
- {
- private:
- _di_IXMLNode _node;
- public:
- xmlNode();
- xmlNode(_di_IXMLNode node);
- void init(_di_IXMLNode node);
- bool isNull()const;
- xmlNode & operator = ( const xmlNode & node_ );
- public:
- AnsiString name()const; //返回节点的名字。
- AnsiString attribute(AnsiString name)const;
- //返回一个属性值。name表示属性名称。
- AnsiString value()const; //获得该节点的字符串值。
- AnsiString child_value(AnsiString name)const;
- //返回该节点的一个子节点的值。name是子节点的节点名字。
- void set_value( AnsiString value_ )const; //设置本节点的值。
- void set_attribute(AnsiString name,AnsiString value)const;
- //设置本节点的一个属性值。形如:name="value"
- void set_child_value(AnsiString name,AnsiString value)const;
- //设置本节点的一个子节点的值。形如:<name>value<name/>
- xmlNode find_child_node(AnsiString name)const;
- //返回名字是name的子节点,如果有的话。
- xmlNode get_child_node(AnsiString name)const;
- //返回一个名字是name的子节点,如果没有,创建一个。
- void get_attrs( map<AnsiString,AnsiString> & attrs )const ;
- //一次获得本节点所有的属性。
- void set_attrs( const map<AnsiString,AnsiString> & attrs )const ;
- //先将旧的属性全部删除,新属性作为一个整体增加。
- void find_child_nodes(vector<xmlNode> & nodes)const; //获得所有子节点。
- void del_child_nodes()const; //删除所有子节点。
- void add_child_node( AnsiString child_name )const; //增加一个子节点
- void del_child_node( AnsiString child_name )const; //删除一个子节点。
- };
- //---------------------------------------------------------------------------
- #endif