Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
xmlmodifyfile.C File Reference

Detailed Description

View in nbviewer Open in SWAN Example to read, modify and store xml file, using TXMLEngine class The input file, produced by xmlnewfile.C macro is used If you need full xml syntax support, use TXMLParser instead

#include "TXMLEngine.h"
// scan node and returns number of childs
// for each child create info node with name and number of childs
int ScanNode(TXMLEngine &xml, XMLNodePointer_t node)
{
int cnt = 0;
XMLNodePointer_t child = xml.GetChild(node);
while (child) {
cnt++;
int numsub = ScanNode(xml, child);
// create new <info> node
XMLNodePointer_t info = xml.NewChild(node, xml.GetNS(child), "info");
// set name and num attributes of info node
xml.NewAttr(info, 0, "name", xml.GetNodeName(child));
if (numsub > 0) xml.NewIntAttr(info, "num", numsub);
// move it after current node
xml.AddChildAfter(node, info, child);
// set pointer to new node
child = info;
xml.ShiftToNext(child);
}
return cnt;
}
void xmlmodifyfile(const char* filename = "example.xml")
{
// First create engine
// Now try to parse xml file
XMLDocPointer_t xmldoc = xml.ParseFile(filename);
if (xmldoc) {
// recursively scan all nodes, insert new when required
ScanNode(xml, xml.DocGetRootElement(xmldoc));
// Save document to file
xml.SaveDoc(xmldoc, "modify.xml");
// Release memory before exit
xml.FreeDoc(xmldoc);
}
}
void * XMLNodePointer_t
Definition TXMLEngine.h:17
void * XMLDocPointer_t
Definition TXMLEngine.h:20
XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content=nullptr)
create new child element for parent node
XMLNodePointer_t GetChild(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
returns first child of xmlnode
XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value)
creates new attribute for xmlnode, namespaces are not supported for attributes
void SaveDoc(XMLDocPointer_t xmldoc, const char *filename, Int_t layout=1)
store document content to file if layout<=0, no any spaces or newlines will be placed between xmlnode...
void FreeDoc(XMLDocPointer_t xmldoc)
frees allocated document data and deletes document itself
XMLNodePointer_t DocGetRootElement(XMLDocPointer_t xmldoc)
returns root node of document
XMLAttrPointer_t NewIntAttr(XMLNodePointer_t xmlnode, const char *name, Int_t value)
create node attribute with integer value
XMLNsPointer_t GetNS(XMLNodePointer_t xmlnode)
return namespace attribute (if exists)
const char * GetNodeName(XMLNodePointer_t xmlnode)
returns name of xmlnode
void AddChildAfter(XMLNodePointer_t parent, XMLNodePointer_t child, XMLNodePointer_t afternode)
Insert new child node after already existing node.
XMLDocPointer_t ParseFile(const char *filename, Int_t maxbuf=100000)
Parses content of file and tries to produce xml structures.
void ShiftToNext(XMLNodePointer_t &xmlnode, Bool_t realnode=kTRUE)
shifts specified node to next if realnode==kTRUE, any special nodes in between will be skipped
Author
Sergey Linev

Definition in file xmlmodifyfile.C.