tdaq-develop-2025-02-12
HttpXmlDocument.h
1 #ifndef ots_HttpXmlDocument_h
2 #define ots_HttpXmlDocument_h
3 
4 #include "otsdaq/XmlUtilities/XmlDocument.h"
5 
6 #include <stdexcept>
7 #include <vector>
8 #include <xercesc/dom/DOMElement.hpp>
9 #include <xercesc/parsers/XercesDOMParser.hpp>
10 
11 namespace ots
12 {
13 // clang-format off
15 {
16  public:
17  HttpXmlDocument (std::string cookieCode = "", std::string displayName = "");
18  HttpXmlDocument (const HttpXmlDocument& doc);
19  HttpXmlDocument& operator= (const HttpXmlDocument& doc);
20  ~HttpXmlDocument (void);
21 
22  void setHeader (std::string cookieCode = "", std::string displayName = "");
23  xercesc::DOMElement* getRootDataElement (void ) { return dataElement_; }
24  xercesc::DOMElement* addTextElementToData (const std::string & field , const std::string & value = "" );
25  template<class T>
26  xercesc::DOMElement* addNumberElementToData (const std::string & field , const T & value ) { return addTextElementToData(field,std::to_string(value)); }
27  xercesc::DOMElement* addBinaryStringToData (const std::string & field , const std::string & binary );
28  template<class T>
29  xercesc::DOMElement* addNumberElementToParent (const std::string & field , const T & value, xercesc::DOMElement* parent) { return addTextElementToParent(field,std::to_string(value),parent); }
30  void copyDataChildren ( HttpXmlDocument & document );
31  std::string getMatchingValue (const std::string & field , const unsigned int occurance = 0 );
32  void getAllMatchingValues (const std::string & field , std::vector<std::string> & retVec);
33  xercesc::DOMElement* getMatchingElement (const std::string & field , const unsigned int occurance = 0 );
34  xercesc::DOMElement* getMatchingElementInSubtree ( xercesc::DOMElement * currEl , const std::string & field, const unsigned int occurance = 0 );
35  void getAllMatchingElements (const std::string & field , std::vector<xercesc::DOMElement*> & retVec );
36  void outputXmlDocument ( std::ostringstream * out , bool dispStdOut = false, bool allowWhiteSpace = false );
37  bool loadXmlDocument (const std::string & filePath );
38  unsigned int getChildrenCount ( xercesc::DOMElement * parent = 0 );
39  void removeDataElement ( unsigned int dataChildIndex = 0 );
40 
41  std::stringstream dataSs_ ; /* use for large xml response construction */
42  private:
43  void recursiveAddElementToParent ( xercesc::DOMElement * child , xercesc::DOMElement * parent , bool html = false );
44  void recursiveFindAllElements ( xercesc::DOMElement * currEl , const std::string & field , std::vector<std::string> * retVec );
45  void recursiveFindAllElements ( xercesc::DOMElement * currEl , const std::string & field , std::vector<xercesc::DOMElement*> * retVec );
46  void recursiveOutputXmlDocument ( xercesc::DOMElement * currEl , std::ostringstream * out , bool dispStdOut = false , std::string tabStr = "" , bool allowWhiteSpace = false);
47  void recursiveFixTextFields ( xercesc::DOMElement * currEl );
48  std::string recursiveFindElementValue ( xercesc::DOMElement * currEl , const std::string & field , const unsigned int occurance , unsigned int & count );
49  xercesc::DOMElement* recursiveFindElement ( xercesc::DOMElement * currEl , const std::string & field , const unsigned int occurance , unsigned int & count );
50 
51  xercesc::DOMElement* headerElement_ ;
52  xercesc::DOMElement* dataElement_ ;
53 
54  const std::string headerTagName_ ;
55  const std::string dataTagName_ ;
56  const std::string cookieCodeTagName_ ;
57  const std::string displayNameTagName_;
58 };
59 // clang-format on
60 } // namespace ots
61 
62 #endif // ots_HttpXmlDocument_h
xercesc::DOMElement * getMatchingElement(const std::string &field, const unsigned int occurance=0)
void getAllMatchingValues(const std::string &field, std::vector< std::string > &retVec)
void outputXmlDocument(std::ostringstream *out, bool dispStdOut=false, bool allowWhiteSpace=false)
HttpXmlDocument(std::string cookieCode="", std::string displayName="")
xercesc::DOMElement * getMatchingElementInSubtree(xercesc::DOMElement *currEl, const std::string &field, const unsigned int occurance=0)
void copyDataChildren(HttpXmlDocument &document)
void removeDataElement(unsigned int dataChildIndex=0)
default to first child
bool loadXmlDocument(const std::string &filePath)
unsigned int getChildrenCount(xercesc::DOMElement *parent=0)
std::string getMatchingValue(const std::string &field, const unsigned int occurance=0)
void getAllMatchingElements(const std::string &field, std::vector< xercesc::DOMElement * > &retVec)
xercesc::DOMElement * addTextElementToParent(const std::string &childName, const std::string &childText, xercesc::DOMElement *parent)
Definition: XmlDocument.cc:190