我正在编写应用程序的一部分,将设置存储在XML文件中,但是我不想“客户端”重复,我想要这样做:
<jack>
<client name="something">
<port name="someport" />
<port name="someport_2" />
</client>
</jack>
但是我得到了:
<jack>
<client name="something">
<port name="someport" />
</client>
<client name="something">
<port name="someport_2" />
</client>
</jack>
以为“只是检查节点是否已经存在”,但这就是问题所在,所以我有这段代码:
// xjack is the root node
pugi::xml_node xclient = xjack.child(sclient.c_str());
if (!xclient) {
xclient = xjack.append_child("client");
}
但
!xclient
始终评估为true,也尝试过if (xclient.empty())
,但也无法正常工作。 最佳答案
考虑一下zeuxcg的评论,我可以找出问题所在。pugi::xml_node xclient = xjack.child(sclient.c_str());
正在寻找名称“something”确实不存在的 child ,我正在寻找的是名称为“client”和属性“name”为“something”的标签。
因此,正确的是:
pugi::xml_node xclient = xjack.find_child_by_attribute("client", "name", sclient.c_str());
if (!xclient) {
xclient = xjack.append_child("client");
xclient.append_attribute("name").set_value(sclient.c_str());
}