Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TXMLEngine.h
Go to the documentation of this file.
1 // @(#)root/xml:$Id$
2 // Author: Sergey Linev 10.05.2004
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TXMLEngine
13 #define ROOT_TXMLEngine
14 
15 #include "TObject.h"
16 
17 typedef void *XMLNodePointer_t;
18 typedef void *XMLNsPointer_t;
19 typedef void *XMLAttrPointer_t;
20 typedef void *XMLDocPointer_t;
21 
22 class TXMLInputStream;
23 class TXMLOutputStream;
24 class TString;
25 
26 class TXMLEngine : public TObject {
27 
28 protected:
29  char *Makestr(const char *str);
30  char *Makenstr(const char *start, int len);
31  XMLNodePointer_t AllocateNode(int namelen, XMLNodePointer_t parent);
32  XMLAttrPointer_t AllocateAttr(int namelen, int valuelen, XMLNodePointer_t xmlnode);
33  XMLNsPointer_t FindNs(XMLNodePointer_t xmlnode, const char *nsname);
34  void TruncateNsExtension(XMLNodePointer_t xmlnode);
35  void UnpackSpecialCharacters(char *target, const char *source, int srclen);
36  void OutputValue(char *value, TXMLOutputStream *out);
37  void SaveNode(XMLNodePointer_t xmlnode, TXMLOutputStream *out, Int_t layout, Int_t level);
38  XMLNodePointer_t ReadNode(XMLNodePointer_t xmlparent, TXMLInputStream *inp, Int_t &resvalue);
39  void DisplayError(Int_t error, Int_t linenumber);
40  XMLDocPointer_t ParseStream(TXMLInputStream *input);
41 
42  Bool_t fSkipComments; //! if true, do not create comments nodes in document during parsing
43 
44 public:
45  TXMLEngine();
46  virtual ~TXMLEngine();
47 
48  void SetSkipComments(Bool_t on = kTRUE) { fSkipComments = on; }
49  Bool_t GetSkipComments() const { return fSkipComments; }
50 
51  Bool_t HasAttr(XMLNodePointer_t xmlnode, const char *name);
52  const char *GetAttr(XMLNodePointer_t xmlnode, const char *name);
53  Int_t GetIntAttr(XMLNodePointer_t node, const char *name);
54  XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value);
55  XMLAttrPointer_t NewIntAttr(XMLNodePointer_t xmlnode, const char *name, Int_t value);
56  void FreeAttr(XMLNodePointer_t xmlnode, const char *name);
57  void FreeAllAttr(XMLNodePointer_t xmlnode);
58  XMLAttrPointer_t GetFirstAttr(XMLNodePointer_t xmlnode);
59  XMLAttrPointer_t GetNextAttr(XMLAttrPointer_t xmlattr);
60  const char *GetAttrName(XMLAttrPointer_t xmlattr);
61  const char *GetAttrValue(XMLAttrPointer_t xmlattr);
62  XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content = nullptr);
63  XMLNsPointer_t NewNS(XMLNodePointer_t xmlnode, const char *reference, const char *name = nullptr);
64  XMLNsPointer_t GetNS(XMLNodePointer_t xmlnode);
65  const char *GetNSName(XMLNsPointer_t ns);
66  const char *GetNSReference(XMLNsPointer_t ns);
67  void AddChild(XMLNodePointer_t parent, XMLNodePointer_t child);
68  void AddChildFirst(XMLNodePointer_t parent, XMLNodePointer_t child);
69  void AddChildAfter(XMLNodePointer_t parent, XMLNodePointer_t child, XMLNodePointer_t afternode);
70  Bool_t AddComment(XMLNodePointer_t parent, const char *comment);
71  Bool_t AddDocComment(XMLDocPointer_t xmldoc, const char *comment);
72  Bool_t AddRawLine(XMLNodePointer_t parent, const char *line);
73  Bool_t AddDocRawLine(XMLDocPointer_t xmldoc, const char *line);
74  Bool_t AddStyleSheet(XMLNodePointer_t parent, const char *href, const char *type = "text/css", const char *title = nullptr,
75  int alternate = -1, const char *media = nullptr, const char *charset = nullptr);
76  Bool_t AddDocStyleSheet(XMLDocPointer_t xmldoc, const char *href, const char *type = "text/css",
77  const char *title = nullptr, int alternate = -1, const char *media = nullptr, const char *charset = nullptr);
78  void UnlinkNode(XMLNodePointer_t node);
79  void FreeNode(XMLNodePointer_t xmlnode);
80  void UnlinkFreeNode(XMLNodePointer_t xmlnode);
81  const char *GetNodeName(XMLNodePointer_t xmlnode);
82  const char *GetNodeContent(XMLNodePointer_t xmlnode);
83  void SetNodeContent(XMLNodePointer_t xmlnode, const char *content, Int_t len = 0);
84  void AddNodeContent(XMLNodePointer_t xmlnode, const char *content, Int_t len = 0);
85  XMLNodePointer_t GetChild(XMLNodePointer_t xmlnode, Bool_t realnode = kTRUE);
86  XMLNodePointer_t GetParent(XMLNodePointer_t xmlnode);
87  XMLNodePointer_t GetNext(XMLNodePointer_t xmlnode, Bool_t realnode = kTRUE);
88  void ShiftToNext(XMLNodePointer_t &xmlnode, Bool_t realnode = kTRUE);
89  Bool_t IsXmlNode(XMLNodePointer_t xmlnode);
90  Bool_t IsEmptyNode(XMLNodePointer_t xmlnode);
91  Bool_t IsContentNode(XMLNodePointer_t xmlnode);
92  Bool_t IsCommentNode(XMLNodePointer_t xmlnode);
93  void SkipEmpty(XMLNodePointer_t &xmlnode);
94  void CleanNode(XMLNodePointer_t xmlnode);
95  XMLDocPointer_t NewDoc(const char *version = "1.0");
96  void AssignDtd(XMLDocPointer_t xmldoc, const char *dtdname, const char *rootname);
97  void FreeDoc(XMLDocPointer_t xmldoc);
98  void SaveDoc(XMLDocPointer_t xmldoc, const char *filename, Int_t layout = 1);
99  void DocSetRootElement(XMLDocPointer_t xmldoc, XMLNodePointer_t xmlnode);
100  XMLNodePointer_t DocGetRootElement(XMLDocPointer_t xmldoc);
101  XMLDocPointer_t ParseFile(const char *filename, Int_t maxbuf = 100000);
102  XMLDocPointer_t ParseString(const char *xmlstring);
103  Bool_t ValidateVersion(XMLDocPointer_t doc, const char *version = nullptr);
104  Bool_t ValidateDocument(XMLDocPointer_t, Bool_t = kFALSE) { return kFALSE; } // obsolete
105  void SaveSingleNode(XMLNodePointer_t xmlnode, TString *res, Int_t layout = 1);
106  XMLNodePointer_t ReadSingleNode(const char *src);
107 
108  ClassDef(TXMLEngine, 1); // ROOT XML I/O parser, user by TXMLFile to read/write xml files
109 };
110 
111 #endif