/* * Author: Patrick-Christopher Mattulat * Company: Lynar Studios * E-Mail: webmaster@lynarstudios.com * Created: 2020-09-24 * Changed: 2020-11-26 * * */ #ifndef LS_STD_XML_NODE_HPP #define LS_STD_XML_NODE_HPP #include #include #include #include "XMLAttribute.hpp" namespace ls_std { class XMLNode : public Class { public: explicit XMLNode(std::string _name); ~XMLNode() override = default; bool addAttributeAfter(const std::shared_ptr& _attribute, const std::string& _name); bool addAttributeBefore(const std::shared_ptr& _attribute, const std::string& _name); bool addAttributeToBeginning(const std::shared_ptr& _attribute); bool addAttributeToEnd(const std::shared_ptr& _attribute); bool addChildAfter(const std::shared_ptr& _child, const std::shared_ptr& _search); bool addChildBefore(const std::shared_ptr& _child, const std::shared_ptr& _search); bool addChildToBeginning(const std::shared_ptr& _child); bool addChildToEnd(const std::shared_ptr& _child); void clearValue(); std::list> getAttributes(); std::list> getChildren(); std::list> getChildren(const std::string& _name); std::string getName(); std::string getValue(); bool hasAttribute(const std::string& _name); bool hasChild(const std::string& _name); bool hasChild(const std::shared_ptr& _child); void removeFirstAttribute(); void removeLastAttribute(); void removeFirstChild(); void removeLastChild(); void setName(std::string _name); void setValue(std::string _value); std::string toXML(); protected: std::string _toXML_(uint8_t _tabSize); private: std::list> attributes {}; std::list> children {}; std::string name {}; const static uint8_t TAB_SIZE {4}; std::string value {}; static std::string _getTab(uint8_t _tabSize); bool _hasAttribute(const std::string& _name); bool _hasChild(const std::shared_ptr& _child); bool _hasChild(const std::string& _name); std::string _toXMLAttributes(); std::string _toXMLChildren(uint8_t _tabSize); std::string _toXMLCloseTag(); std::string _toXMLOpenTag(); std::string _toXMLOpenTagClose(); std::string _toXMLValue(); }; } #endif