00001 00002 00003 #ifndef _GXMLTREE_H_ 00004 #define _GXMLTREE_H_ 00005 00007 #define GXT_NO_ENTITIES 0x0001 00008 00009 #define GXT_NO_PRETTY_WHITESPACE 0x0002 00010 00012 class LgiClass GXmlAttr 00013 { 00014 public: 00016 char *Name; 00018 char *Value; 00019 00020 GXmlAttr() 00021 { 00022 Name = 0; 00023 Value = 0; 00024 } 00025 00026 GXmlAttr(char *n, char *v) 00027 { 00028 Name = NewStr(n); 00029 Value = NewStr(v); 00030 } 00031 00032 ~GXmlAttr() 00033 { 00034 DeleteArray(Name); 00035 DeleteArray(Value); 00036 } 00037 }; 00038 00045 class LgiClass GXmlTag : public GDom 00046 { 00047 friend class GXmlTree; 00048 00049 protected: 00050 bool Write; 00051 GXmlAttr *_Attr(char *Name, bool Write); 00052 bool GetVariant(char *Name, GVariant &Value, char *Array); 00053 bool SetVariant(char *Name, GVariant &Value, char *Array); 00054 00055 public: 00058 char *Tag; 00060 char *Content; 00062 GXmlTag *Parent; 00064 List<GXmlAttr> Attr; 00067 List<GXmlTag> Children; 00068 00070 GXmlTag 00071 ( 00073 char *tag = 0 00074 ); 00075 virtual ~GXmlTag(); 00076 00078 bool Dump(int Depth = 0); 00079 00081 char *GetAttr(char *Name); 00083 int GetAsInt(char *Name); 00085 bool SetAttr(char *Name, char *Value); 00087 bool SetAttr(char *Name, int Value); 00088 00090 bool SerializeAttr(char *Attr, int &Int); 00092 bool SerializeAttr(char *Attr, char *&Str); 00094 bool SerializeAttr(char *Attr, double &Dbl); 00095 00097 virtual bool Serialize() { return false; } 00099 GXmlTag *GetTag(char *Name, bool Create = false); 00101 GXmlTag *CreateTag(char *Name) { return GetTag(Name, true); } 00103 virtual void InsertTag(GXmlTag *t); 00105 virtual void RemoveTag(); 00106 }; 00107 00112 class GXmlFactory 00113 { 00114 public: 00116 virtual GXmlTag *Create(char *Tag) = 0; 00117 }; 00118 00120 class LgiClass GXmlTree 00121 { 00122 class GXmlTreePrivate *d; 00123 00124 GXmlTag *Parse(GXmlTag *Tag, char *&t, bool &NoChildren, bool InTypeDef); 00125 void Output(GXmlTag *t, int Depth); 00126 00127 public: 00129 GXmlTree 00130 ( 00132 int Flags = 0 00133 ); 00134 ~GXmlTree(); 00135 00137 bool Read 00138 ( 00140 GXmlTag *Root, 00142 GStream *File, 00145 GXmlFactory *Factory 00146 ); 00148 bool Write 00149 ( 00151 GXmlTag *Root, 00153 GStream *File 00154 ); 00156 char *GetErrorMsg(); 00157 }; 00158 00159 #endif