func:实现了排序功能。
This commit is contained in:
@@ -52,6 +52,33 @@ bool CXmlOpr::parse_xml(std::vector<tinyxml2::XMLElement*>& vec)
|
||||
return true;
|
||||
}
|
||||
|
||||
// 排序后(仅指针排序)的节点进行复制(让实际内容有序),删除原始节点
|
||||
void CXmlOpr::copy_and_del(std::vector<Element_t*>& vec, std::vector<Element_t*>& out)
|
||||
{
|
||||
out.clear();
|
||||
// 先找到最后一个节点
|
||||
Element_t* last_node = parent_node_->LastChildElement(opr_base_.the_node.c_str());
|
||||
Element_t* last_node_bk = last_node;
|
||||
if (last_node == nullptr) {
|
||||
return;
|
||||
}
|
||||
for (const auto& data : vec) {
|
||||
Element_t* n = copy_element(data);
|
||||
out.push_back(n);
|
||||
insert_brother_node(last_node, n);
|
||||
last_node = n;
|
||||
}
|
||||
// 删除原有的节点
|
||||
Element_t* fnode = parent_node_->FirstChildElement(opr_base_.the_node.c_str());
|
||||
Element_t* fnext = fnode->NextSiblingElement();
|
||||
while (fnode != last_node_bk) {
|
||||
parent_node_->DeleteChild(fnode);
|
||||
fnode = fnext;
|
||||
fnext = fnode->NextSiblingElement();
|
||||
}
|
||||
parent_node_->DeleteChild(last_node_bk);
|
||||
}
|
||||
|
||||
void CXmlOpr::insert_brother_node(Element_t* brother, Element_t* newer)
|
||||
{
|
||||
if (!brother || !newer) {
|
||||
|
||||
@@ -24,6 +24,7 @@ public:
|
||||
bool open(const std::string& xml_path);
|
||||
void set_baseinfo(const OprBase& base);
|
||||
bool parse_xml(std::vector<Element_t*>& vec);
|
||||
void copy_and_del(std::vector<Element_t*>& vec, std::vector<Element_t*>& out);
|
||||
void insert_brother_node(Element_t* brother, Element_t* newer);
|
||||
Element_t* copy_element(Element_t* ele);
|
||||
void del_element(Element_t* ele);
|
||||
|
||||
Reference in New Issue
Block a user