/* **************************************************************************** * Copyright 2022 Open Systems Development BV * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the "Software"), * * to deal in the Software without restriction, including without limitation * * the rights to use, copy, modify, merge, publish, distribute, sublicense, * * and/or sell copies of the Software, and to permit persons to whom the * * Software is furnished to do so, subject to the following conditions: * * * * The above copyright notice and this permission notice shall be included in * * all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * * DEALINGS IN THE SOFTWARE. * * ***************************************************************************/ #pragma once #include #include #include #include namespace osdev { namespace components { namespace xml { /*! * \brief xml_string_writer * This struct is used to write a pugixml DOM document to a std::string. * pugiXML is not able to do this on its own, but we use the possibility * to dump an xml-document to std::cout. */ struct xml_string_writer : pugi::xml_writer { std::string result = std::string(); virtual void write(const void* data, size_t size) override; }; /*! * \brief The XmlBase class describes the base class for all xml related classes. * The basic functionality is implemented here. This class is intrended to * be inherited an d specialized and not to be used directly. ( Nothing bad * will happen, just to make life easier. ) */ class XmlBase { public: /*! Default constructor */ explicit XmlBase(const std::string xmlFile = std::string() ); virtual ~XmlBase(); /*! * \brief Parses the xml contents of the string. * \param sxml - String containing the xml-string * \return true if succesful, false if not... */ bool parseString(const std::string &sxml); /*! * \brief Parses the contents of the givenm XML-file. * \param sxml - String with the filepath & -name of the xml file. * \return true if succesfull, false if not. */ bool parseFile(const std::string sxml); /*! * \brief Adds and XPath expression to the internal structure. * \param sName - Name of the XPath expression. This should be descriptive to make life easier. * \param sXPath - The XPath expression to the specific data we're interested in. */ void addXPath(const std::string &sName, const std::string &sXPath); /*! * \brief Retrieves an XPatrh expression from the internal structure * \param sXpathSelect - The name of the XPath expression * \return The XPath expression as stored in the internal Hash. */ std::string getXPath(const std::string &sXpathSelect); }; } // End namespace xml } // End namespace components } // End namespace osdev