Visual Servoing Platform  version 3.6.1 under development (2024-04-16)
vpXmlParser.h
1 /*
2  * ViSP, open source Visual Servoing Platform software.
3  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
4  *
5  * This software is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See https://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Tools to automatize the creation of xml parser based on the libXML2
32  */
33 
34 #ifndef vpXmlParser_HH
35 #define vpXmlParser_HH
36 
42 #include <visp3/core/vpConfig.h>
43 
44 #ifdef VISP_HAVE_XML2
45 
46 #include <visp3/core/vpException.h>
47 
48 #include <libxml/parser.h>
49 
50 #include <iomanip>
51 #include <map>
52 #include <sstream>
53 #include <string.h>
54 #include <string>
55 #include <typeinfo>
56 
176 class VISP_EXPORT vpXmlParser
177 {
178 protected:
191  virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node) = 0;
192 
202  virtual void writeMainClass(xmlNodePtr node) = 0;
203 
204  bool xmlReadBoolChild(xmlDocPtr doc, xmlNodePtr node);
205  char *xmlReadCharChild(xmlDocPtr doc, xmlNodePtr node);
206  double xmlReadDoubleChild(xmlDocPtr doc, xmlNodePtr node);
207  float xmlReadFloatChild(xmlDocPtr doc, xmlNodePtr node);
208  int xmlReadIntChild(xmlDocPtr doc, xmlNodePtr node);
209  std::string xmlReadStringChild(xmlDocPtr doc, xmlNodePtr node);
210  unsigned int xmlReadUnsignedIntChild(xmlDocPtr doc, xmlNodePtr node);
211 
212  void xmlWriteBoolChild(xmlNodePtr node, const char *label, bool value);
213  void xmlWriteCharChild(xmlNodePtr node, const char *label, const char *value);
214  void xmlWriteDoubleChild(xmlNodePtr node, const char *label, double value);
215  void xmlWriteFloatChild(xmlNodePtr node, const char *label, float value);
216  void xmlWriteIntChild(xmlNodePtr node, const char *label, int value);
217  void xmlWriteStringChild(xmlNodePtr node, const char *label, const std::string &value);
218  void xmlWriteUnsignedIntChild(xmlNodePtr node, const char *label, unsigned int value);
220 
221 protected:
225  std::map<std::string, int> nodeMap;
226 
230  std::string main_tag;
231 
232 public:
235  vpXmlParser();
236  vpXmlParser(const vpXmlParser &_twin);
237  virtual ~vpXmlParser();
238 
239  /* virtual */ void parse(const std::string &filename);
240  /* virtual */ void save(const std::string &filename, bool append = false);
241 
285  void setMap(const std::map<std::string, int> &_map) { nodeMap = _map; }
286 
294  inline void setMainTag(const std::string &tag) { main_tag = tag; }
296 
309  static void cleanup() { xmlCleanupParser(); }
311 };
312 
313 #endif /* VISP_HAVE_XML2 */
314 
315 #endif
void setMainTag(const std::string &tag)
Definition: vpXmlParser.h:294
std::map< std::string, int > nodeMap
Definition: vpXmlParser.h:225
void setMap(const std::map< std::string, int > &_map)
Definition: vpXmlParser.h:285
virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node)=0
static void cleanup()
Definition: vpXmlParser.h:309
virtual void writeMainClass(xmlNodePtr node)=0
std::string main_tag
Definition: vpXmlParser.h:230