到目前为止,我可以删除我想删除的实际节点的所有子节点,但不删除节点本身。
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("config/config.xml");
pugi::xpath_query query_network_last_run("//state[network/network_last_run='2']");
pugi::xpath_node_set network_last_run = query_network_last_run.evaluate_node_set(doc);
下面的部分删除了特定部分 - 但我想根据子值(network_last_run)删除网络,而不是它的子项。
network_last_run[0].node().remove_child("network_gateway");
XML文件结构
<root>
<state>
<network>
<network_last_run>2<network_last_run>
<network_gateway>192.168.3.1</network_gateway>
</network>
</state>
</root>
我尝试使用
重新启动network_last_run[0].node().parent().remove_child("network");
但似乎只修改了存储在内存中的实际结构(删除了第一个)而不是查询所具有的结构。
我可以在for循环中执行此操作并使用if条件来检查子节点值是否匹配,但是如果可能的话我想通过查询来执行此操作?
答案 0 :(得分:0)
稍微玩了一下后,这就是我所做的解决方案(我无法在其他任何地方找到答案,所以我想我可以在这里发布)
基本上它会更改相关实际节点的名称。之后,它运行一个查询(其中的节点集可以在for循环中使用)并删除任何具有新名称的子元素。
network_last_run[0].node().set_name("removal");
pugi::xpath_query query_removals("//state");
pugi::xpath_node_set removals = query_removals.evaluate_node_set(doc);
removals[0].node().remove_child("removal");