我正在编写应用程序的一部分,将设置存储在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());
}

08-19 13:44