Visual Servoing Platform version 3.6.0
Loading...
Searching...
No Matches
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
176class VISP_EXPORT vpXmlParser
177{
178protected:
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
221protected:
225 std::map<std::string, int> nodeMap;
226
230 std::string main_tag;
231
232public:
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)
std::map< std::string, int > nodeMap
void setMap(const std::map< std::string, int > &_map)
virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node)=0
static void cleanup()
virtual void writeMainClass(xmlNodePtr node)=0
std::string main_tag