00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef XML_H
00025 #define XML_H
00026
00027 #include <string>
00028 #include <list>
00029 #include <ctype.h>
00030
00031 using std::string;
00032 using std::list;
00033
00034 class XmlNode {
00035 private:
00036 static string parseTag(string::iterator& curr, string::iterator end);
00037 static void skipWS(string::iterator& curr, string::iterator end);
00038
00039 protected:
00040 string tag;
00041
00042 XmlNode(const string& t);
00043
00044 public:
00045 virtual ~XmlNode();
00046
00047 virtual bool isBranch() = 0;
00048 bool isLeaf();
00049
00050 string getTag();
00051
00052 static XmlNode *parse(string::iterator& start, string::iterator end);
00053
00054 static string quote(const string& s);
00055 static string unquote(const string& s);
00056 static string replace_all(const string& s, const string& r1, const string& r2);
00057
00058 virtual string toString(int n) = 0;
00059 };
00060
00061 class XmlLeaf;
00062
00063 class XmlBranch : public XmlNode {
00064 private:
00065 list<XmlNode*> children;
00066
00067 public:
00068 XmlBranch(const string& t);
00069 ~XmlBranch();
00070
00071 bool isBranch();
00072 bool exists(const string& tag);
00073 XmlNode *getNode(const string& tag);
00074 XmlBranch *getBranch(const string& tag);
00075 XmlLeaf *getLeaf(const string& tag);
00076
00077 void pushnode(XmlNode *c);
00078
00079 string toString(int n);
00080
00081 };
00082
00083 class XmlLeaf : public XmlNode {
00084 private:
00085 string value;
00086 public:
00087 XmlLeaf(const string& t, const string& v);
00088 ~XmlLeaf();
00089
00090 bool isBranch();
00091 string getValue();
00092
00093 string toString(int n);
00094
00095 };
00096
00097 #endif
00098