#ifndef XML_OPERT_HEADER #define XML_OPERT_HEADER #include "config.h" #include #include #include struct SKeyValue { SKeyValue(const char* pkey, const char* pvalue); std::string key; std::string value; }; typedef tinyxml2::XMLElement Element_t; typedef std::vector Property_t; class CXmlOpr { public: CXmlOpr(); ~CXmlOpr(); public: bool open(const std::string& xml_path); bool backup_file(const std::string& desti_folder, const std::string& time); void set_baseinfo(const OneGroupIni& base); bool parse_xml(std::vector& vec); bool get_all_unit(std::vector& units); bool get_all_elements(std::vector& vec, const std::string& unit = ""); void copy_and_del(std::vector& vec, std::vector& out); void insert_brother_node(Element_t* brother, Element_t* newer); void del_element(Element_t* ele); bool check_key_exists(const Property_t& property); bool check_key_exists(const std::string& key); bool save(); public: Element_t* copy_element(Element_t* ele); // 检查 xml 格式合法性 bool check_valid_xml_data(const std::string& data); // 不检查 xml 格式合法性,请自行调用 check_valid_xml_data bool check_same_struct(const std::string& data); // 不检查 xml 格式合法性,请自行调用 check_valid_xml_data bool import_newer_data(const std::vector& vec, std::size_t& success_count); public: void get_attributes(Element_t* ele, Property_t& vec); void attributes_to_element(Element_t* ele, const Property_t& vec); private: tinyxml2::XMLDocument doc_{}; OneGroupIni opr_base_{}; std::string xml_path_{}; Element_t* parent_node_{}; std::vector keys_{}; std::vector units_{}; }; #endif