TXMLEngine.h

Go to the documentation of this file.
00001 // @(#)root/xml:$Id: TXMLEngine.h 36517 2010-11-05 14:43:58Z pcanal $
00002 // Author: Sergey Linev  10.05.2004
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
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;    //! if true, do not create comments nodes in document during parsing
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; } // obsolete
00113    void              SaveSingleNode(XMLNodePointer_t xmlnode, TString* res, Int_t layout = 1);
00114    XMLNodePointer_t  ReadSingleNode(const char* src);
00115 
00116    ClassDef(TXMLEngine,1);   // ROOT XML I/O parser, user by TXMLFile to read/write xml files
00117 };
00118 
00119 #endif

Generated on Tue Jul 5 14:28:30 2011 for ROOT_528-00b_version by  doxygen 1.5.1