Предотвратить дублирование pugixml :: xml_node

Я пишу часть своего приложения, которая хранит настройки в 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()) но не работа тоже.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]