my_xml.h
上传用户:wangli
上传日期:2008-04-19
资源大小:3077k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

C++ Builder

  1. /*
  2.     这是我写的一个xml文件类,封装了 IXMLDocument,用于在c++builder程序中
  3.     建立、读写xml文件,经过一年多的修改和使用,感觉还行。
  4. 作者:lao-hong
  5.   */
  6. //下面是"my_xml.h"的内容:    (用到了STL)
  7. //---------------------------------------------------------------------------
  8. //2003-1-26
  9. #ifndef my_xmlH
  10. #define my_xmlH
  11. #include <XMLDoc.hpp>
  12. #include <map.h>
  13. #include <vector.h>
  14. //---------------------------------------------------------------------------
  15.       class xmlNode; //表征xml节点的类,
  16.                      //因为与 myXML 有交叉引用,所以在此预先定义一下。
  17. //---------------------------------------------------------------------------
  18. class myXML   //xml文件类.
  19. {
  20.    private:
  21.       int SavePause;  //用来控制防止频繁的存盘,提高效率。
  22.    private:
  23.         AnsiString _fpath;        //xml文件名,包含路径。
  24.         _di_IXMLDocument XmlDoc;     //cb中的xml文档类。
  25.         _di_IXMLNode Root;       //根节点,只有一个。
  26.     public:
  27.         myXML();                 //构造函数
  28.         myXML(AnsiString fpath);   //构造函数
  29.         void init(AnsiString fpath);  //初始化
  30.         bool isNull()const;      //是否有效
  31.         void save()const;       //存盘
  32.         xmlNode root()const;    //获得根节点
  33.         void disable_save();  //该函数使后面的save()操作无效。
  34.         void enable_save();   //执行save()操作。
  35.                   //这两个函数总是成对出现,用于使两个函数之间的大量
  36.                   //零碎的存盘操作(如果有的话)被跳过,以提高系统效率。
  37.                   //这两个函数是我后来加的,与XML文档没有关系,
  38.                   //如果你觉得没有必要,可以去掉。
  39.         void save_to( AnsiString fpath_ )const;  //保存到另外的文件
  40. };
  41. //---------------------------------------------------------------------------
  42.    typedef map<AnsiString,AnsiString>  attrMap; //用来表示节点的一组属性
  43.                                                 //定义这个可以少打好多字。
  44. //---------------------------------------------------------------------------
  45. class xmlNode         //表征xml节点的类,    
  46. {
  47.     private:
  48.         _di_IXMLNode _node;
  49.     public:
  50.         xmlNode();
  51.         xmlNode(_di_IXMLNode node);
  52.         void init(_di_IXMLNode node);
  53.         bool isNull()const;
  54.         xmlNode & operator = ( const xmlNode & node_ );  
  55.     public:
  56.         AnsiString name()const;  //返回节点的名字。
  57.         AnsiString attribute(AnsiString name)const;
  58.                         //返回一个属性值。name表示属性名称。
  59.         AnsiString value()const;   //获得该节点的字符串值。
  60.         AnsiString child_value(AnsiString name)const;
  61.                      //返回该节点的一个子节点的值。name是子节点的节点名字。
  62.         void set_value( AnsiString value_ )const; //设置本节点的值。
  63.         void set_attribute(AnsiString name,AnsiString value)const;
  64.                               //设置本节点的一个属性值。形如:name="value"
  65.         void set_child_value(AnsiString name,AnsiString value)const;
  66.                          //设置本节点的一个子节点的值。形如:<name>value<name/>
  67.         xmlNode find_child_node(AnsiString name)const;
  68.                          //返回名字是name的子节点,如果有的话。
  69.         xmlNode get_child_node(AnsiString name)const;
  70.                       //返回一个名字是name的子节点,如果没有,创建一个。
  71.         void get_attrs( map<AnsiString,AnsiString> & attrs )const ;
  72.                                           //一次获得本节点所有的属性。
  73.         void set_attrs( const map<AnsiString,AnsiString> & attrs )const ;
  74.                //先将旧的属性全部删除,新属性作为一个整体增加。
  75.       void find_child_nodes(vector<xmlNode> & nodes)const;  //获得所有子节点。
  76.       void del_child_nodes()const;     //删除所有子节点。
  77.       void add_child_node( AnsiString child_name )const; //增加一个子节点
  78.       void del_child_node( AnsiString child_name )const; //删除一个子节点。
  79. };
  80. //---------------------------------------------------------------------------
  81. #endif