fix:v1.3.1修复BUG。
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
#include "xml_opr.h"
|
||||
#include "../public_def.h"
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
#include "../public_def.h"
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
CXmlOpr::CXmlOpr() = default;
|
||||
@@ -13,12 +15,13 @@ bool CXmlOpr::open(const std::string& xml_path)
|
||||
if (doc_.LoadFile(CUtil::utf8_to_gbk(xml_path).c_str()) != tinyxml2::XML_SUCCESS) {
|
||||
return false;
|
||||
}
|
||||
xml_path_ = CUtil::utf8_to_gbk(xml_path);
|
||||
#else
|
||||
if (doc_.LoadFile(xml_path.c_str()) != tinyxml2::XML_SUCCESS) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
xml_path_ = xml_path;
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -44,21 +47,21 @@ bool CXmlOpr::get_all_elements(std::vector<Element_t*>& vec, const std::string&
|
||||
{
|
||||
vec.clear();
|
||||
|
||||
Element_t* temp = parent_node_;
|
||||
parent_node2_ = parent_node_;
|
||||
|
||||
if (!unit.empty()) {
|
||||
temp = temp->FirstChildElement(unit.c_str());
|
||||
parent_node2_ = parent_node2_->FirstChildElement(unit.c_str());
|
||||
}
|
||||
|
||||
if (!opr_base_.relative_nodes.empty()) {
|
||||
auto v = CUtil::splitString(opr_base_.relative_nodes, ",");
|
||||
// 向下子项跳跃
|
||||
for (const auto& it : v) {
|
||||
temp = temp->FirstChildElement(it.c_str());
|
||||
parent_node2_ = parent_node2_->FirstChildElement(it.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
auto purpose_node = temp->FirstChildElement(opr_base_.item_key.c_str());
|
||||
auto purpose_node = parent_node2_->FirstChildElement(opr_base_.item_key.c_str());
|
||||
while (purpose_node) {
|
||||
vec.push_back(purpose_node);
|
||||
purpose_node = purpose_node->NextSiblingElement();
|
||||
@@ -81,7 +84,6 @@ bool CXmlOpr::parse_xml(std::vector<tinyxml2::XMLElement*>& vec)
|
||||
|
||||
auto nodes = CUtil::splitString(opr_base_.main_nodes, "/");
|
||||
for (const auto& item : nodes) {
|
||||
|
||||
if (item.empty()) {
|
||||
continue;
|
||||
}
|
||||
@@ -93,6 +95,10 @@ bool CXmlOpr::parse_xml(std::vector<tinyxml2::XMLElement*>& vec)
|
||||
}
|
||||
}
|
||||
|
||||
if (parent_node_ == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (opr_base_.is_same) {
|
||||
units_.clear();
|
||||
auto p = parent_node_->FirstChildElement();
|
||||
@@ -110,7 +116,7 @@ bool CXmlOpr::parse_xml(std::vector<tinyxml2::XMLElement*>& vec)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CXmlOpr::get_all_unit(std::vector<std::string> &units)
|
||||
bool CXmlOpr::get_all_unit(std::vector<std::string>& units)
|
||||
{
|
||||
units = units_;
|
||||
return true;
|
||||
@@ -121,7 +127,7 @@ void CXmlOpr::copy_and_del(std::vector<Element_t*>& vec, std::vector<Element_t*>
|
||||
{
|
||||
out.clear();
|
||||
// 先找到最后一个节点
|
||||
Element_t* last_node = parent_node_->LastChildElement(opr_base_.item_key.c_str());
|
||||
Element_t* last_node = parent_node2_->LastChildElement(opr_base_.item_key.c_str());
|
||||
Element_t* last_node_bk = last_node;
|
||||
if (last_node == nullptr) {
|
||||
return;
|
||||
@@ -133,14 +139,14 @@ void CXmlOpr::copy_and_del(std::vector<Element_t*>& vec, std::vector<Element_t*>
|
||||
last_node = n;
|
||||
}
|
||||
// 删除原有的节点
|
||||
Element_t* fnode = parent_node_->FirstChildElement(opr_base_.item_key.c_str());
|
||||
Element_t* fnode = parent_node2_->FirstChildElement(opr_base_.item_key.c_str());
|
||||
Element_t* fnext = fnode->NextSiblingElement();
|
||||
while (fnode != last_node_bk) {
|
||||
parent_node_->DeleteChild(fnode);
|
||||
parent_node2_->DeleteChild(fnode);
|
||||
fnode = fnext;
|
||||
fnext = fnode->NextSiblingElement();
|
||||
}
|
||||
parent_node_->DeleteChild(last_node_bk);
|
||||
parent_node2_->DeleteChild(last_node_bk);
|
||||
}
|
||||
|
||||
void CXmlOpr::insert_brother_node(Element_t* brother, Element_t* newer)
|
||||
@@ -148,7 +154,7 @@ void CXmlOpr::insert_brother_node(Element_t* brother, Element_t* newer)
|
||||
if (!brother || !newer) {
|
||||
return;
|
||||
}
|
||||
parent_node_->InsertAfterChild(brother, newer);
|
||||
parent_node2_->InsertAfterChild(brother, newer);
|
||||
}
|
||||
|
||||
Element_t* CXmlOpr::copy_element(Element_t* ele)
|
||||
@@ -177,7 +183,7 @@ bool CXmlOpr::check_valid_xml_data(const std::string& data)
|
||||
|
||||
bool CXmlOpr::check_same_struct(const std::string& data)
|
||||
{
|
||||
auto* own_ele = parent_node_->FirstChildElement(opr_base_.item_key.c_str());
|
||||
auto* own_ele = parent_node2_->FirstChildElement(opr_base_.item_key.c_str());
|
||||
if (own_ele == nullptr) {
|
||||
return true;
|
||||
}
|
||||
@@ -219,7 +225,7 @@ bool CXmlOpr::check_same_struct(const std::string& data)
|
||||
bool CXmlOpr::import_newer_data(const std::vector<std::string>& vec, std::size_t& success_count)
|
||||
{
|
||||
success_count = 0;
|
||||
auto* last_item = parent_node_->LastChildElement(opr_base_.item_key.c_str());
|
||||
auto* last_item = parent_node2_->LastChildElement(opr_base_.item_key.c_str());
|
||||
if (last_item == nullptr) {
|
||||
return false;
|
||||
}
|
||||
@@ -244,7 +250,7 @@ bool CXmlOpr::import_newer_data(const std::vector<std::string>& vec, std::size_t
|
||||
|
||||
void CXmlOpr::del_element(Element_t* ele)
|
||||
{
|
||||
parent_node_->DeleteChild(ele);
|
||||
parent_node2_->DeleteChild(ele);
|
||||
}
|
||||
|
||||
bool CXmlOpr::check_key_exists(const Property_t& property)
|
||||
@@ -252,7 +258,7 @@ bool CXmlOpr::check_key_exists(const Property_t& property)
|
||||
if (keys_.size() < 1 || property.size() < 1) {
|
||||
return false;
|
||||
}
|
||||
return check_key_exists(property[0].key);
|
||||
return check_key_exists(property[0].value);
|
||||
}
|
||||
|
||||
bool CXmlOpr::check_key_exists(const std::string& key)
|
||||
@@ -260,7 +266,7 @@ bool CXmlOpr::check_key_exists(const std::string& key)
|
||||
if (keys_.size() < 1 || key.empty()) {
|
||||
return false;
|
||||
}
|
||||
Element_t* purpose_node = parent_node_->FirstChildElement(opr_base_.item_key.c_str());
|
||||
Element_t* purpose_node = parent_node2_->FirstChildElement(opr_base_.item_key.c_str());
|
||||
while (purpose_node) {
|
||||
const char* value = purpose_node->Attribute(keys_[0].c_str());
|
||||
if (key == std::string(value)) {
|
||||
|
||||
Reference in New Issue
Block a user