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
00011 #define GXT_KEEP_WHITESPACE 0x0004
00012
00013 #define GXT_NO_DOM 0x0008
00014
00015 class GXmlTreePrivate;
00016
00018 class LgiClass GXmlAttr
00019 {
00020 public:
00022 char *Name;
00024 char *Value;
00025
00026 GXmlAttr()
00027 {
00028 Name = 0;
00029 Value = 0;
00030 }
00031
00032 GXmlAttr(char *n, char *v, bool ownmem = true)
00033 {
00034 OwnMem = ownmem;
00035 Name = ownmem ? NewStr(n) : n;
00036 Value = ownmem ? NewStr(v) : v;
00037 }
00038
00039 ~GXmlAttr()
00040 {
00041 if (OwnMem)
00042 {
00043 DeleteArray(Name);
00044 DeleteArray(Value);
00045 }
00046 }
00047
00048 private:
00049 bool OwnMem;
00050 };
00051
00058 class LgiClass GXmlTag : public GDom
00059 {
00060 friend class GXmlTree;
00061
00062 protected:
00063 bool Write;
00064 GXmlAttr *_Attr(char *Name, bool Write);
00065 bool GetVariant(char *Name, GVariant &Value, char *Array);
00066 bool SetVariant(char *Name, GVariant &Value, char *Array);
00067
00068 public:
00071 char *Tag;
00073 char *Content;
00075 GXmlTag *Parent;
00077 List<GXmlAttr> Attr;
00080 List<GXmlTag> Children;
00081
00083 GXmlTag
00084 (
00086 char *tag = 0
00087 );
00088 virtual ~GXmlTag();
00089
00091 bool Dump(int Depth = 0);
00092
00094 char *GetAttr(char *Name);
00096 int GetAsInt(char *Name);
00098 bool SetAttr(char *Name, char *Value);
00100 bool SetAttr(char *Name, int Value);
00102 bool DelAttr(char *Name);
00103
00105 bool SerializeAttr(char *Attr, int &Int);
00107 bool SerializeAttr(char *Attr, char *&Str);
00109 bool SerializeAttr(char *Attr, double &Dbl);
00110
00112 virtual bool Serialize() { return false; }
00114 GXmlTag *GetTag(char *Name, bool Create = false);
00116 GXmlTag *CreateTag(char *Name) { return GetTag(Name, true); }
00118 virtual void InsertTag(GXmlTag *t);
00120 virtual void RemoveTag();
00121
00123 GXmlTag &operator =(GXmlTag &t);
00124 };
00125
00130 class GXmlFactory
00131 {
00132 public:
00134 virtual GXmlTag *Create(char *Tag) = 0;
00135 };
00136
00138 class LgiClass GXmlTree
00139 {
00140 GXmlTreePrivate *d;
00141
00142 GXmlTag *Parse(GXmlTag *Tag, char *&t, bool &NoChildren, bool InTypeDef);
00143 void Output(GXmlTag *t, int Depth);
00144
00145 public:
00147 GXmlTree
00148 (
00150 int Flags = 0
00151 );
00152 ~GXmlTree();
00153
00155 bool Read
00156 (
00158 GXmlTag *Root,
00160 GStream *File,
00163 GXmlFactory *Factory
00164 );
00166 bool Write
00167 (
00169 GXmlTag *Root,
00171 GStream *File
00172 );
00174 char *GetErrorMsg();
00175 };
00176
00177 #endif