#include "xml_opr.h" CXmlOpr::CXmlOpr() = default; CXmlOpr::~CXmlOpr() = default; bool CXmlOpr::open(const std::string &xml_path) { if (doc_.LoadFile(xml_path.c_str()) != tinyxml2::XML_SUCCESS) { return false; } xml_path_ = xml_path; return true; } void CXmlOpr::set_baseinfo(const OprBase& base) { opr_base_ = base; } bool CXmlOpr::parse_xml(std::vector& vec) { std::string next_node{}; std::string node_path = opr_base_.node_path; auto nodes = splitString(opr_base_.node_path, "/"); for (const auto& item : nodes) { if (item.empty()) { continue; } if (parent_node_ == nullptr) { parent_node_ = doc_.FirstChildElement(item.c_str()); } else { parent_node_ = parent_node_->FirstChildElement(item.c_str()); } } vec.clear(); element* purpose_node = parent_node_->FirstChildElement(opr_base_.the_node.c_str()); while (purpose_node) { vec.push_back(purpose_node); purpose_node = purpose_node->NextSiblingElement(); } return true; } void CXmlOpr::insert_brother_node(element* brother, element* newer) { if (!brother || !newer) { return; } parent_node_->InsertAfterChild(brother, newer); } element* CXmlOpr::copy_element(element* ele) { if (!ele) { return nullptr; } element* ret = doc_.NewElement(ele->Name()); const auto* attribute = ele->FirstAttribute(); while (attribute) { ret->SetAttribute(attribute->Name(), attribute->Value()); attribute = attribute->Next(); } return ret; } bool CXmlOpr::save() { auto ret = doc_.SaveFile(xml_path_.c_str()); if (ret != tinyxml2::XML_SUCCESS) { return false; } return true; }