【发布时间】:2018-04-07 20:25:25
【问题描述】:
我想从基于 xml 的 ptree 中删除一个节点:
<library>
<booklist>
<book id="10">
<data title="t1"/>
</book>
<book id="10">
<data title="t2"/>
</book>
<book id="10">
<data title="t3"/>
</book>
<book id="20">
<data title="t4"/>
</book>
</booklist>
</library>
我有一个算法来找到正确的节点,它返回一个指向删除节点的指针。我还有一个指向删除节点的父级的指针。但 erase() 将采用迭代器(不是指针)。 我的问题是如何使用两个指针删除节点;一个指向删除节点的指针,另一个指向父节点。
void removeElement(const std::string addr, const std::string criteria, boost::property_tree::ptree &ptSource)
{
boost::property_tree::ptree *ptParent = findParentPTree(addr, criteria, ptSource); // Points to "library.booklist"
boost::property_tree::ptree *ptRemove = findRemovePTree(addr, criteria, ptSource); // eg the third <book> which contains the <data title="t3"/>
// question: how to remove node ptRemove from ptSource?
}
注意有一些使用迭代器的例子,但不清楚应该如何找到移除节点的迭代器。
【问题讨论】:
-
开箱即用:考虑不要写入抽象的
ptree接口,而是编写一些特定于域的包装器,就像这个非常相似的例子:stackoverflow.com/questions/45198739/… -
为了获得最大的相关性,这里的示例被简单地转换为 XML 而不是 JSON coliru.stacked-crooked.com/a/af72134e9c1a18ab