1

我正在编写将设置存储在 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总是评估为真,也尝试过if (xclient.empty())但也不起作用。

4

1 回答 1

2

考虑 zeuxcg 的评论,我可以找出问题所在。

pugi::xml_node xclient = xjack.child(sclient.c_str());正在寻找一个名为“something”的孩子,但实际上并不存在,我正在寻找的是一个名为“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());
}
于 2013-06-28T19:19:49.253 回答