00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TXMLEngine
00013 #define ROOT_TXMLEngine
00014
00015 #ifndef ROOT_TObject
00016 #include "TObject.h"
00017 #endif
00018
00019 typedef void* XMLNodePointer_t;
00020 typedef void* XMLNsPointer_t;
00021 typedef void* XMLAttrPointer_t;
00022 typedef void* XMLDocPointer_t;
00023
00024 class TXMLInputStream;
00025 class TXMLOutputStream;
00026 class TString;
00027
00028 class TXMLEngine : public TObject {
00029
00030 protected:
00031 char* Makestr(const char* str);
00032 char* Makenstr(const char* start, int len);
00033 XMLNodePointer_t AllocateNode(int namelen, XMLNodePointer_t parent);
00034 XMLAttrPointer_t AllocateAttr(int namelen, int valuelen, XMLNodePointer_t xmlnode);
00035 XMLNsPointer_t FindNs(XMLNodePointer_t xmlnode, const char* nsname);
00036 void TruncateNsExtension(XMLNodePointer_t xmlnode);
00037 void UnpackSpecialCharacters(char* target, const char* source, int srclen);
00038 void OutputValue(char* value, TXMLOutputStream* out);
00039 void SaveNode(XMLNodePointer_t xmlnode, TXMLOutputStream* out, Int_t layout, Int_t level);
00040 XMLNodePointer_t ReadNode(XMLNodePointer_t xmlparent, TXMLInputStream* inp, Int_t& resvalue);
00041 void DisplayError(Int_t error, Int_t linenumber);
00042 XMLDocPointer_t ParseStream(TXMLInputStream* input);
00043
00044 Bool_t fSkipComments;
00045
00046 public:
00047 TXMLEngine();
00048 virtual ~TXMLEngine();
00049
00050 void SetSkipComments(bool on = kTRUE) { fSkipComments = on; }
00051 Bool_t GetSkipComments() const { return fSkipComments; }
00052
00053 Bool_t HasAttr(XMLNodePointer_t xmlnode, const char* name);
00054 const char* GetAttr(XMLNodePointer_t xmlnode, const char* name);
00055 Int_t GetIntAttr(XMLNodePointer_t node, const char* name);
00056 XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t,
00057 const char* name, const char* value);
00058 XMLAttrPointer_t NewIntAttr(XMLNodePointer_t xmlnode, const char* name, Int_t value);
00059 void FreeAttr(XMLNodePointer_t xmlnode, const char* name);
00060 void FreeAllAttr(XMLNodePointer_t xmlnode);
00061 XMLAttrPointer_t GetFirstAttr(XMLNodePointer_t xmlnode);
00062 XMLAttrPointer_t GetNextAttr(XMLAttrPointer_t xmlattr);
00063 const char* GetAttrName(XMLAttrPointer_t xmlattr);
00064 const char* GetAttrValue(XMLAttrPointer_t xmlattr);
00065 XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns,
00066 const char* name, const char* content = 0);
00067 XMLNsPointer_t NewNS(XMLNodePointer_t xmlnode, const char* reference, const char* name = 0);
00068 XMLNsPointer_t GetNS(XMLNodePointer_t xmlnode);
00069 const char* GetNSName(XMLNsPointer_t ns);
00070 const char* GetNSReference(XMLNsPointer_t ns);
00071 void AddChild(XMLNodePointer_t parent, XMLNodePointer_t child);
00072 void AddChildFirst(XMLNodePointer_t parent, XMLNodePointer_t child);
00073 Bool_t AddComment(XMLNodePointer_t parent, const char* comment);
00074 Bool_t AddDocComment(XMLDocPointer_t xmldoc, const char* comment);
00075 Bool_t AddRawLine(XMLNodePointer_t parent, const char* line);
00076 Bool_t AddDocRawLine(XMLDocPointer_t xmldoc, const char* line);
00077 Bool_t AddStyleSheet(XMLNodePointer_t parent,
00078 const char* href,
00079 const char* type = "text/css",
00080 const char* title = 0,
00081 int alternate = -1,
00082 const char* media = 0,
00083 const char* charset = 0);
00084 Bool_t AddDocStyleSheet(XMLDocPointer_t xmldoc,
00085 const char* href,
00086 const char* type = "text/css",
00087 const char* title = 0,
00088 int alternate = -1,
00089 const char* media = 0,
00090 const char* charset = 0);
00091 void UnlinkNode(XMLNodePointer_t node);
00092 void FreeNode(XMLNodePointer_t xmlnode);
00093 void UnlinkFreeNode(XMLNodePointer_t xmlnode);
00094 const char* GetNodeName(XMLNodePointer_t xmlnode);
00095 const char* GetNodeContent(XMLNodePointer_t xmlnode);
00096 XMLNodePointer_t GetChild(XMLNodePointer_t xmlnode);
00097 XMLNodePointer_t GetParent(XMLNodePointer_t xmlnode);
00098 XMLNodePointer_t GetNext(XMLNodePointer_t xmlnode);
00099 void ShiftToNext(XMLNodePointer_t &xmlnode, bool tonode = true);
00100 Bool_t IsEmptyNode(XMLNodePointer_t xmlnode);
00101 void SkipEmpty(XMLNodePointer_t &xmlnode);
00102 void CleanNode(XMLNodePointer_t xmlnode);
00103 XMLDocPointer_t NewDoc(const char* version = "1.0");
00104 void AssignDtd(XMLDocPointer_t xmldoc, const char* dtdname, const char* rootname);
00105 void FreeDoc(XMLDocPointer_t xmldoc);
00106 void SaveDoc(XMLDocPointer_t xmldoc, const char* filename, Int_t layout = 1);
00107 void DocSetRootElement(XMLDocPointer_t xmldoc, XMLNodePointer_t xmlnode);
00108 XMLNodePointer_t DocGetRootElement(XMLDocPointer_t xmldoc);
00109 XMLDocPointer_t ParseFile(const char* filename);
00110 XMLDocPointer_t ParseString(const char* xmlstring);
00111 Bool_t ValidateVersion(XMLDocPointer_t doc, const char* version = 0);
00112 Bool_t ValidateDocument(XMLDocPointer_t, Bool_t = kFALSE) { return kFALSE; }
00113 void SaveSingleNode(XMLNodePointer_t xmlnode, TString* res, Int_t layout = 1);
00114 XMLNodePointer_t ReadSingleNode(const char* src);
00115
00116 ClassDef(TXMLEngine,1);
00117 };
00118
00119 #endif