防止重复pugixml :: xml_node(Prevent duplicate pugixml:

2019-10-18 07:58发布

我正在写我的应用程序存储在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())但也不能正常工作。

Answer 1:

想着评论zeuxcg我可以弄清楚什么是错的。

pugi::xml_node xclient = xjack.child(sclient.c_str()); 正在查找与名称“东西”真的不存在,我正在寻找一个孩子是名称为“客户”标签和属性“名”与“东西”的价值。

所以,正确的是:

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());
}


文章来源: Prevent duplicate pugixml::xml_node
标签: c++ xml pugixml