otsdaq  3.03.00
XmlDocument.h
1 #ifndef ots_XmlDocument_h
2 #define ots_XmlDocument_h
3 
4 #include <dirent.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <sys/stat.h>
8 #include <sys/types.h>
9 #include <unistd.h>
10 #include <map>
11 #include <sstream>
12 #include <string>
13 #include <vector>
14 
15 #include <xercesc/dom/DOM.hpp>
16 #include <xercesc/dom/DOMElement.hpp>
17 #include <xercesc/framework/LocalFileFormatTarget.hpp>
18 #include <xercesc/framework/StdOutFormatTarget.hpp>
19 #include <xercesc/parsers/XercesDOMParser.hpp>
20 #include <xercesc/util/OutOfMemoryException.hpp>
21 #include <xercesc/util/PlatformUtils.hpp>
22 #include <xercesc/util/XMLString.hpp>
23 
24 #if defined(XERCES_NEW_IOSTREAMS)
25 #include <iostream>
26 #else
27 #include <iostream.h>
28 #endif
29 
30 // clang-format off
31 //===============================================================================================================
32 namespace ots
33 {
36 {
38  public:
39  XmlDocument(const std::string& rootName = "ROOT");
40  XmlDocument(const XmlDocument& doc);
41  XmlDocument& operator=(const XmlDocument& doc);
42  ~XmlDocument(void);
43 
44  xercesc::DOMElement* createChildElement(const std::string& childClass, xercesc::DOMElement* parent);
45  xercesc::DOMElement* addAttributeToNode(const std::string& attributeName, const std::string& attributeValue, xercesc::DOMElement* node);
46  xercesc::DOMElement* addTextElementToParent(const std::string& childName, const std::string& childText, xercesc::DOMElement* parent);
47  xercesc::DOMElement* addTextElementToParent(const std::string& childName, const std::string& childText, const std::string& parentName, unsigned int parentIndex = 0);
48  void saveXmlDocument(const std::string& filePath);
49  void recursiveRemoveChild(xercesc::DOMElement* childEl, xercesc::DOMElement* parentEl);
50  bool loadXmlDocument(const std::string& filePath);
51  void outputXmlDocument(std::ostringstream* out, bool dispStdOut = false);
52  void makeDirectoryBinaryTree(const std::string& name, const std::string& rootPath, int indent, xercesc::DOMElement* anchorNode);
53  xercesc::DOMElement* populateBinaryTreeNode(xercesc::DOMElement* anchorNode, const std::string& name, int indent, bool isLeaf);
54  void setAnchors(const std::string& fSystemPath, const std::string& fRootPath);
55  void setDocument(xercesc::DOMDocument* doc);
56  void setDarioStyle(bool darioStyle);
57  void setRootPath(const std::string& rootPath) { fRootPath_ = rootPath; }
58  xercesc::DOMElement* getRootElement() { return rootElement_; }
60  protected:
61  void copyDocument(const xercesc::DOMDocument* toCopy, xercesc::DOMDocument* copy);
62  void recursiveElementCopy(const xercesc::DOMElement* toCopy, xercesc::DOMElement* copy);
63  void initDocument(void);
64  void initPlatform(void);
65  void terminatePlatform(void);
66  void recursiveOutputXmlDocument(xercesc::DOMElement* currEl, std::ostringstream* out, bool dispStdOut = false, const std::string& tabStr = "");
67 
68  xercesc::DOMImplementation* theImplementation_;
69  xercesc::DOMDocument* theDocument_;
70  xercesc::DOMElement* rootElement_;
71  const std::string rootTagName_;
72 
73  xercesc::DOMDocument* doc;
74  xercesc::DOMElement* rootElem;
75  DIR* dir;
76  struct dirent* entry;
77  int lastIndent;
78  int errorCode;
79  int level;
80  std::string fullPath;
81  std::string fullFPath;
82  std::stringstream ss_;
83  std::map<int, xercesc::DOMElement*> theNodes_;
84  std::map<int, std::string> theNames_;
85  std::vector<std::string> hierarchyPaths_;
86  xercesc::DOMImplementation* impl;
87  xercesc::DOMLSSerializer* pSerializer;
88  xercesc::DOMConfiguration* pDomConfiguration;
89  bool darioXMLStyle_;
90 
91  std::string fSystemPath_;
92  std::string fRootPath_;
93  std::string fFoldersPath_;
94  std::string fFileName_;
95  std::string fThisFolderPath_;
96  int indent_;
97  std::map<bool, std::string> isALeaf_;
98 };
99 } // namespace ots
100 
101 // clang-format on
102 #endif // ots_XmlDocument_h
Note that XmlDocument functionality is extended by HttpXmlDocument class.
Definition: XmlDocument.h:36
xercesc::DOMElement * addTextElementToParent(const std::string &childName, const std::string &childText, xercesc::DOMElement *parent)
Definition: XmlDocument.cc:244
void copyDocument(const xercesc::DOMDocument *toCopy, xercesc::DOMDocument *copy)
Definition: XmlDocument.cc:310
void recursiveRemoveChild(xercesc::DOMElement *childEl, xercesc::DOMElement *parentEl)
Definition: XmlDocument.cc:453
void setDarioStyle(bool darioStyle)
Used by developer Dario Menasce for alternative XML requests at web user interface.
Definition: XmlDocument.cc:833
XmlDocument(const std::string &rootName="ROOT")
Definition: XmlDocument.cc:46
void saveXmlDocument(const std::string &filePath)
Definition: XmlDocument.cc:473
void outputXmlDocument(std::ostringstream *out, bool dispStdOut=false)
Definition: XmlDocument.cc:348
void recursiveOutputXmlDocument(xercesc::DOMElement *currEl, std::ostringstream *out, bool dispStdOut=false, const std::string &tabStr="")
Definition: XmlDocument.cc:358