12 #ifndef ROOT_TXMLEngine
13 #define ROOT_TXMLEngine
17 typedef void *XMLNodePointer_t;
18 typedef void *XMLNsPointer_t;
19 typedef void *XMLAttrPointer_t;
20 typedef void *XMLDocPointer_t;
22 class TXMLInputStream;
23 class TXMLOutputStream;
26 class TXMLEngine :
public TObject {
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);
46 virtual ~TXMLEngine();
48 void SetSkipComments(Bool_t on = kTRUE) { fSkipComments = on; }
49 Bool_t GetSkipComments()
const {
return fSkipComments; }
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; }
105 void SaveSingleNode(XMLNodePointer_t xmlnode, TString *res, Int_t layout = 1);
106 XMLNodePointer_t ReadSingleNode(
const char *src);
108 ClassDef(TXMLEngine, 1);