From f2b1525b9217f92a3a3dbf015f8e1b3003f6fa0e Mon Sep 17 00:00:00 2001
From: taynpg <taynpg@163.com>
Date: Tue, 27 Aug 2024 20:15:41 +0800
Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9Av1.3.1=E4=BF=AE=E5=A4=8DBUG?=
 =?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .vscode/settings.json  |   2 +-
 CMakeLists.txt         |   3 ++-
 MainWidget.cpp         |   4 ++--
 README.md              |   2 +-
 resource/xml.ico       | Bin 5896 -> 16958 bytes
 resource/xml.png       | Bin 9278 -> 0 bytes
 src/attribute_edit.cpp |   6 +++---
 src/config.cpp         |   7 ++++---
 src/config.h           |   2 +-
 src/data_edit.cpp      |  17 ++++++++++-------
 src/history.cpp        |   2 +-
 src/xml_opr.cpp        |  42 +++++++++++++++++++++++------------------
 src/xml_opr.h          |   1 +
 13 files changed, 50 insertions(+), 38 deletions(-)
 delete mode 100644 resource/xml.png

diff --git a/.vscode/settings.json b/.vscode/settings.json
index f074984..be26477 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -19,7 +19,7 @@
         "visualizerFile": "${workspaceRoot}/.vscode/qt6.natvis"
     },
     "cmake.environment": {
-        "PATH": "${env:PATH};C:/Qt/6.6.3/msvc2019_64/bin"
+        "PATH": "${env:PATH};C:/Qt/6.7.2/bin"
     },
     "cmake.options.statusBarVisibility": "visible",
     "cmake.generator": "Ninja",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dd871aa..8321ea1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,8 @@ endif()
 message(STATUS "User home directory: ${USER_HOME}")
 
 set(CMAKE_PREFIX_PATH
-    "C:/Qt/6.6.3/msvc2019_64"
+    ${CMAKE_PREFIX_PATH}
+    "C:/Qt/6.7.2"
     "${USER_HOME}/Qt5.14.2/5.14.2/gcc_64/"
 )
 
diff --git a/MainWidget.cpp b/MainWidget.cpp
index 7e0c5d7..2a8fbee 100644
--- a/MainWidget.cpp
+++ b/MainWidget.cpp
@@ -18,7 +18,7 @@ MainWidget::MainWidget(QWidget* parent) : QWidget(parent), ui(new Ui::MainWidget
 {
     ui->setupUi(this);
 
-    setWindowTitle(u8"OneLevelXmlOpr v1.3.0");
+    setWindowTitle(u8"OneLevelXmlOpr v1.3.1");
     setWindowIcon(QIcon("://resource/xml.ico"));
 
     QScreen* primaryScreen = QGuiApplication::primaryScreen();
@@ -483,7 +483,7 @@ bool MainWidget::edit_property(Element_t* target, int row)
     }
 
     attri_edit_->get_attribute(property);
-    if (property[0].value != value_pre) {
+    if (property[0].value == value_pre) {
         while (xml_.check_key_exists(property)) {
             CUtil::msg(attri_edit_, u8"不能有相同的key,请检查。");
             attri_edit_->exec();
diff --git a/README.md b/README.md
index 6d1b694..f6806e2 100644
--- a/README.md
+++ b/README.md
@@ -4,4 +4,4 @@
 
 # 编译环境
 
-在 `msvc Qt5.14.2` 和 `vs2017` 环境下通过。
\ No newline at end of file
+`windows`下,`Qt6`可正常使用无乱码。
\ No newline at end of file
diff --git a/resource/xml.ico b/resource/xml.ico
index 8f1f46718045c6666c1eb96be30dfe2e813adf58..1574bde508f58946af5308fc9cda2a545d82fb28 100644
GIT binary patch
literal 16958
zcmeI44RBo5b;pk^8CjOB-S>7STegLb9b!sK(<zxIv@<b*#LW!TAuVp{G-*Dj%_KB4
zn2+L=grssp;wE70b3Y`@hJ?B{q-khEpveqDp)HW41q@iy?%NMZ{tThSoi=Tf61Knp
zefyY2wM@X4?P2zL{=RSDyZ7AlKlk2q&b`lLvj+ZLda3dEYP;YvvraR+0Px6qfS$YS
zQnP<*4-r17|6R90-2!zB)GbiAK-~g$3)C$z-xdf`zMTm3-T#@CAEdn#au3qjCgYz;
z73ZyQ$6frL4Jd~a3z!Enhe5v~;x7KLHygZ+yZ8@wVh4W}+^+-IbH6&cE#w{Xf4$fs
zpQ(;{H1_GF=D<og-vUaY40_;uZZJ682Hw2Q$I~TP{3A?^XxzPS@X0Fo3Z*aw|G#oJ
z*xthY$7WTWE<NX~pNRY9aGW*noeMPX8uN&IR8GTR^I%nwjWxX9_~)};3!FB>`|;y&
zk8JQHb^Z{juA2k%H7@fdH^?N=`{gKQlQy-ZV?iOExB%|kz<%&7I0pWsde5^&ANOwx
zQgLDf>&C^ym&=+jy-!wdrDFDP*K}FFKVgL${yE(bciO(e#a2#rHWpHT7kCG_5w5bu
zcI<K;xE%h=iHl9au7pjb66V@gWl5%Fs}J>cHeLJgF$<2Gjo-Y&a(%uPv%ckaE@cfT
zT5{RsIlI3R$0kdylu9zD37Z;-$qq62cEZ0CZtdlv&c?iAKfLpB9l2wrscn!&2C^hG
z-<z~2ws`jZ=qfv~edSqUf`1)0d+hJbe)gN!Sn!2qmK%)Q*REe`g|y!d|EuA<0iN+(
zCPvN^x5*tVtTf~q{D}q34d%GUwuo)UzvNkw7?|fhZR6NsgJek7*e&N;(3iBQhuW-i
z!(|rq`li0m^d%kk+-r7d+gd9OB`x=DYba#AwdlMBZj<0qcz%#_WiYU4L6Ave8^#zs
zo?d4A@9MPta5e5T#)m)K-hgeEQ(tXp>rWu-Glh(Q{=sZl!^G$kE8OYZKM&Yh!@n|G
zvMFNw<c=jxK{ozoV%#8l9|H30zW{-Imh#qf-&M#YTXU(7#+h`xO>K)=euv)}Wc^ln
z$~XKr_#*Xk)wYsx7-X>9Z%{6r8CqeLTXvs4{BQe|O)-}FOuUQu-HVPt0#QthO8I$W
zUt$>i8TaqPzh6xKw*cn3|6wo^*71LQoc7Q0zE6FqugYy7KV$rZ0p@EJdDi=Z)Cw!6
zJG7SLU=v`x{~!Oz4*$tJji+*7jj^D6J^L>Z)tg-w;C};oLA=Nsnn@FD=sVIw<>|QO
zw;YCiE3poPZT#MhZ^Mt3(@R;q#IVo?`zU{Y0zR|(&GlO{o&q=E16GzZNtYYuuE9sr
zw{$3=OQhF)*`U&6cK=t`5tH#>vVr<kyc(q(Nm_Xe{*Tx-vv;}n_zCp=1J?65D1Qj#
z1Lop4*K@Tw3ck)d*+^_mmag4OpPn5YT4#k(_E9@S9U}hHO*%@~Q+X-AANnf!P4+yS
zAeSq`f2uz&Kb=IswXElsJn^lR>T>5B1!5UKu7$XE5jOfbbsh%thd%*x@r|Bq4XEyS
z!DeJ%l+Pv?l{0a-kJ8!?24jkuExcbV9i)qNl5Wybx=QC$b?tk=tiqqk-fo*DR#iT+
zLUUjZ{eK$lMaL`Pycpjky)5|BT4H_74&D1^e#<9##030X+TRHt1M&|u;9wQH*Rw}i
z<D;x`{A2vr$bsVrzkIRf$QvH}<~!WH%Ml|>>0~SYTtQv>_CGCMq?2@$j?z^+pQ`J~
zjc>K-&#kfYwq;h#ELuQ+>*)7(ApQRbJcJE4lB@WILGoYr`V;Ax6-PQW4{UnpTZ#8x
zEA_g-1+;%VdEQmvPpY`eJxe1uqxk5xj%R)ypQ3rho>{&Ynbc8U<pZrP%@6f09d4IS
z#ca!h^6g7)`qtHU<l2i*6@B7!%yOeK8^33fe9s%{F9o!&qd6-d^#r&MtSJq}nv}~H
zw1>%dFn-PA?|h_k+rz!FhT>4NIT%c~2)frZy@NlT$pcf(v?GtyZ(>V69cw~1Yt5Y(
zJxN*XTct}X$i&|`zNeufx1-JSBYfySMHk~5?&-3LMd)`WeTi$tJt|-1*#U3|W3z!d
zu(XhhH@ZEXxDS)J;TOp1!~B<Ak-d(C@<!#vlgyQX_xZsk&R%)OyEvR^MCLNa|J{^#
zR{Kz2QNK}1ZsA>t4VpDqgj03B#6Q!?_;XH`=B(!UXBg5&{!8&n>*I1bun+KBC-F(F
z5eLNyY!uE3##;B(b?-C>CO>Zt%$GKv(bm75Qv1ZG!Cd~c%scs_?&2V4Cnv$*tud{$
zDzqP))L2Dx;2&D0Yd4Tz9|tdhXbfu0V?1Y1@85+!AHfEfaF5SSEQ7z+aJ%D}@!E9H
zJD+!5%$GIzz2BnEN5i(R59N-vvZH(Ttv+s|UH798Eq5_O{3n@f(mmo4m2=Gr?WrH%
zRNcQb7Eyi4$PKZEH9m^>l#f5VN^wqm*Y|^mfpWS?r`hFy^X>?co)5q=OCGPW+T`pa
z+l2X25ATNI@sIqLUDZZyXUmIz(`N!7n0Oy`IxB}(GM|`J=qO#K^UL__9p?w)IQ#rS
z`NEAK*kDg>U26G0onH`RIFrW)t*p_7r7t(JHa*rZ`6ly1a*HYAaXQh4O)h0@cc8-*
z_}>%gE4}qzwt5a61<HBFQ~vAUf!5A1Bcsf^8p)>;>xmI<<Na0N>iDzAMpx-9-NnIi
zfs?q2qqs&nk}E4^``*qKHjd5m{l48~@7Fl5q3wq#FXIfetu)BHVdWh<m(tmc_OY^w
z*9iaB)FZxojIYaGYJGDwUME{hrt+fu!JmTF<Nb-olJ?H-Og)Ud1>$ab0A10UI+s;B
ztPv-16Gw41IE%Y*_qTr4p5DdSk0h+}J+ngAe*<l|f&h#m>-XTeBu_s&htd8$2M!Ol
zxcOEXYUj7tnooIeqW;IgeV_!iZeIkimAl$XhGgA`pZN1)+P@GTS||G3jq$f<cP}Ph
zu+|xS)`E?bi!%;OoX+UZb8*-zPU0qx;wsJ&|FOHzv)pjf4h(WGmG*yyIlY}WvbFS<
z-5&ve%(_TUY-=a?$0zRSv?6(l*4sF7zL-teb9;5}lUPFC^TF?fULgNa1e)XG@>8JP
zezr~YOz%`jb=5{~d(lU--hkh1d!&zX!naMsLwt*U%=ca4p5$o%VxIX)IJ}oqI!9~i
zkT{8(IEt${NBkezO<s%LN@=eHj-RES)?}@I^0SIRH__*L<uCZ;D$Ioe>EPQljQ=$D
z*x$$cKquJ*Khcao>g4@8@NW9%jMML9Z0_Orcfb#T;-v6>pl5eerxzK@qkadhlZ<@U
zZw|EILiQni&^X`ErdW&2H!Jp2vIY+J#yDH@&!f#|@C=w8myU>=IEt${NBlKs=tFBe
z&OE=KwgphjKf0g6_oY}<m$2t*S58BHyZ^h)D{}uy@^tj)eADp{{jtU<>o<|Fx6=-L
z==+b`J1CEoZ3NvD8@+Bgy7N%xSQC7l43&jD#2?x6!Rfd?y`4VY8M$Jdr?aC=KpHs*
zK%{SNSwznD;wY}-9PyVgFQ9)u%Qu>g`!@F%$jHwjM{%9F<A03)*3xF7a(?BvhrX^H
zhkRxbf2=rxzLf(0MEa9Iz~8;s^W#Igkm3*Xin>QC=fA|i2v^zq@ZYNs>8ltQKZiJ=
zF_%Al5J<OL&e6Smz+Zyy{78)R$+(MO5r6q~$#&>>=Q!G@5TD)LjMh*jOQq)4G`JJK
zS29Pt^Xd3Gii@&CVL<1+Zd@FnVwPvGl0SYfv<19#qs$?l^`N7CUXY2Mqq)NPzX$&4
z;J&9FPftDD2d)KO!Jc+(7xENm@z?bdciDjV(_;%L-5JIoQEFW(F4yvp?tjAb9Q;RV
z_a5%oz`uRwQwx<RJ6RgfpW~xlKIX<f>;wP&QortAdQn&HR99`(Hq_U*AKogN9yz01
zC-mjfr#m~74v{{!rF4D}c~^r(@Yl6-F6=vGAO7uZ;B*M}&J#l!gT>78^|b#RWE}=C
zo}e%JjIRNG(|;T7Sm&J8r4tMH6Q7hb@Gj&-KgZ?o##U=SVQQnclEJ#^25*yW_}@#Z
zzUJaB9nm#$7jtfXVK}i^`wh;Qoo#vN)>bX|=ssGr%4^DugYuo};RL?RlaG>LmCv4Q
zF39#j1BzYy;IFfZPk`TLtzLu;wN97ACkZ_Gw_|hiN3YG@^NjVAq~3DXb!})X8C6-D
z$C9l+YR9?uUb;!g&9qrJJ=)QfPjL>Rv$BXkyiRm!U1;r1F$NDPuOVORxrVcswC7`=
zcY&SAm;H72P}}$Hd%gb=C^Hs(*L8V4ZN1Nfo8i3)e6$Mrnw!B^>g^2c(k5KjlJQD?
zDQ_qNwS6b0KYZ&()={T@=aZbvjdBh%9L|9gagW}WQyq2?e^t4UbF=|sZI<&7`LDrv
z6Z}_Ui>u-Ax79vhNw>%@@<ke-=YcqBERR&7dp-Lx(7ZmLFN@^Vmg>8VPG12Z;C?md
z1x-2PQ5l_|8CYtSyx9TrqZ0YatGOziA8Mbpk9@04y!n?q&L!{DxfZ@S<<1z0*Z%v!
z9*_g#^#Z8XZ$9pSK_ABe@j0=F@qRD&Yl9(gagYtqi=O;kmzBs9o<w(X5SQ0_mB?wz
z;7EU~@(equvscApmxuT*^t}rIvH|;V;r>BT2C~J8*6FLYi)2aW6zlq7eBl?t74To3
z=lgKM<y+{)nJabd@ZMI=9$Cl3r|t|$`G*jGyQQyc?#sXHV6Tjy8S;H%@rCryIjGB_
z<)@W1&j8JDjhW`F=C;Ogwhi=5?^H*1)kZnSQ`lB<<uk0gtBM)#Le9E7N(0_P&c(xc
zxeI-qU#HaAfcd)6#l;Wh<GSCg{UZCJBL3kZeund_X8d^qeO80FFh(0GuLHM%-Qa#O
z29)#5rwh8*GrdzC)ujz*#FF8Bj-M!`<IUp(od45zk+t~zW|yb1cOzEe--Xk4ab}AS
zI=3WW<eR;||30yuJt=l@v7PbQ*T-Hl#W^oI5%aYJE-QiTvKDBMsJJTVUeEMyC9$tV
zc@%rB=3unVct-pY;&yabvrUj2lr$d)0J*ksrmly2%)YV-AM?oDi52=rL!2Ro=BsnU
z<sQ=A<^IeW?q3PY?Oh$o(%B<>Yqb~unUN*-%`NO*A3iz1HedFV&ynvb@x4H6LVE%?
zey^3k+HWWK=j`TmedC=k+tlUOEl{^W-2!zB)GbiAK-~gog9R$5?m89=Wlc4Q<yd1_
z_B4d04it3FQ64jM0>;c-!yf+Qg0OnnK-N0W@1N@Vs!E0CPQaK-1oWsxz%N<4<_H*5
zGX(Uwg8w?<HC|Esv9NvPR9H4g{W!Hz{DtuOdaR<WQW;Z${t+KnVLin4T>N=aHMD-6
G?Dc<^SPMV^

literal 5896
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

diff --git a/resource/xml.png b/resource/xml.png
deleted file mode 100644
index bb8811e7f26b0e0d75de4fbebbc0d6e6d4706873..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9278
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

diff --git a/src/attribute_edit.cpp b/src/attribute_edit.cpp
index 34bb1c5..3fcd516 100644
--- a/src/attribute_edit.cpp
+++ b/src/attribute_edit.cpp
@@ -1,4 +1,5 @@
 #include "attribute_edit.h"
+
 #include "ui_attribute_edit.h"
 
 CAttributeEdit::CAttributeEdit(QWidget* parent) : QDialog(parent), ui(new Ui::CAttributeEdit)
@@ -22,13 +23,12 @@ void CAttributeEdit::handle_ok()
     for (int i = 0; i < row; ++i) {
         QString key = table_->item(i, 0)->text();
         QString value = table_->item(i, 1)->text();
-        property_.emplace_back(key.toLocal8Bit().constData(), value.toLocal8Bit().constData());
+        property_.emplace_back(key.toStdString().c_str(), value.toStdString().c_str());
     }
     is_ok_ = true;
     close();
 }
 
-
 CAttributeEdit::~CAttributeEdit()
 {
     delete ui;
@@ -59,7 +59,7 @@ void CAttributeEdit::show_before()
 
     is_ok_ = false;
 
-    for(auto i = 0; i < property_.size(); ++i) {
+    for (auto i = 0; i < property_.size(); ++i) {
         int row = table_->rowCount();
         table_->insertRow(row);
 
diff --git a/src/config.cpp b/src/config.cpp
index 4a44c1a..8d11e84 100644
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -1,4 +1,5 @@
 #include "config.h"
+
 #include <QDir>
 #include <filesystem>
 
@@ -13,7 +14,7 @@ void CGroupIni::default_set()
     QDir dir;
     std::string path = dir.homePath().toStdString();
     fs::path p(path);
-    p.append(".config");
+    p.append(".config/OneLevelXmlOpr");
 
     if (!fs::exists(p)) {
         fs::create_directories(p);
@@ -41,7 +42,7 @@ void CGroupIni::get_all_node(StrVec_t& vec)
 {
     vec.clear();
 
-    CSimpleIni::TNamesDepend secs;
+    CSimpleIniA::TNamesDepend secs;
     ini_.GetAllSections(secs);
     for (const auto& sec : secs) {
         vec.push_back(sec.pItem);
@@ -93,7 +94,7 @@ bool CGroupIni::get_item(OneGroupIni& group)
     return true;
 }
 
-bool CGroupIni::del_item(const std::string &key)
+bool CGroupIni::del_item(const std::string& key)
 {
     ini_.Delete(key.c_str(), "MainNodes", true);
     ini_.Delete(key.c_str(), "RelativeNodes", true);
diff --git a/src/config.h b/src/config.h
index 2fd8129..51fec0e 100644
--- a/src/config.h
+++ b/src/config.h
@@ -3,7 +3,7 @@
 
 #include <string>
 #include <SimpleIni.h>
-
+#include <vector>
 /*
 
 [Basic]
diff --git a/src/data_edit.cpp b/src/data_edit.cpp
index 59e441e..081d12d 100644
--- a/src/data_edit.cpp
+++ b/src/data_edit.cpp
@@ -1,11 +1,14 @@
 #include "data_edit.h"
-#include "ui_data_edit.h"
-#include <QScreen>
-#include <QClipboard>
+
 #include <tinyxml2.h>
-#include <vector>
+
+#include <QClipboard>
+#include <QScreen>
 #include <string>
+#include <vector>
+
 #include "../public_def.h"
+#include "ui_data_edit.h"
 
 CDataEdit::CDataEdit(QWidget* parent) : QDialog(parent), ui(new Ui::CDataEdit)
 {
@@ -58,7 +61,7 @@ void CDataEdit::import_data()
     }
 
     std::vector<std::string> valid_data{};
-    QStringList              list = data.trimmed().split("\n");
+    QStringList list = data.trimmed().split("\n");
     for (int i = 0; i < list.size(); ++i) {
         const QString& item = list[i];
         if (item.trimmed().isEmpty()) {
@@ -70,7 +73,7 @@ void CDataEdit::import_data()
         }
         valid_data.push_back(item.toStdString());
     }
-    auto        task_count = valid_data.size();
+    auto task_count = valid_data.size();
     std::size_t success_count{};
     if (!xml_opr_->import_newer_data(valid_data, success_count)) {
         CUtil::msg(this, u8"导入失败。");
@@ -91,7 +94,7 @@ void CDataEdit::showEvent(QShowEvent* event)
 void CDataEdit::show_before()
 {
     QScreen* primaryScreen = QGuiApplication::primaryScreen();
-    QRect    screenGeometry = primaryScreen->geometry();
+    QRect screenGeometry = primaryScreen->geometry();
     setMinimumWidth(screenGeometry.width() * 0.8);
     if (is_import_) {
         ui->btnCopy->setVisible(false);
diff --git a/src/history.cpp b/src/history.cpp
index 515d914..c3bccc6 100644
--- a/src/history.cpp
+++ b/src/history.cpp
@@ -41,7 +41,7 @@ void CHistory::default_set()
     QDir dir;
     std::string path = dir.homePath().toStdString();
     fs::path p(path);
-    p.append(".config");
+    p.append(".config/OneLevelXmlOpr");
 
     if (!fs::exists(p)) {
         fs::create_directories(p);
diff --git a/src/xml_opr.cpp b/src/xml_opr.cpp
index dd4e57d..cb0633f 100644
--- a/src/xml_opr.cpp
+++ b/src/xml_opr.cpp
@@ -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)) {
diff --git a/src/xml_opr.h b/src/xml_opr.h
index 1f8e3b4..d9f92d8 100644
--- a/src/xml_opr.h
+++ b/src/xml_opr.h
@@ -52,6 +52,7 @@ private:
     OneGroupIni opr_base_{};
     std::string xml_path_{};
     Element_t* parent_node_{};
+    Element_t* parent_node2_{};
     std::vector<std::string> keys_{};
     std::vector<std::string> units_{};
 };