防止重复的pugixml :: xml_node

时间:2013-06-27 23:42:34

标签: c++ xml pugixml

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

1 个答案:

答案 0 :(得分:1)

考虑zeuxcg的评论我可以弄清楚出了什么问题。

pugi::xml_node xclient = xjack.child(sclient.c_str());正在寻找一个真正不存在的名字“某事”的孩子,我正在寻找的是名为“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());
}