c++ - 如何从 Boost.PropertyTree 复制子树

标签 c++ boost boost-propertytree subtree

我有一些 boost::property_tree::ptree .我需要删除一些具有特定标签名称的元素的树。例如,源的 xml ptree是以下内容:

<?xml version="1.0" encoding="utf-8"?>
<document>
  <B atr="one" atr1="something">
    <to_remove attr="two">10</to_remove>
  </B>
  <to_remove>
    <C>value</C>
    <D>other value</D>
  </to_remove>
  <E>nothing</E>
</document>

我想得到 ptree使用如下 xml:

<?xml version="1.0" encoding="utf-8"?>
<document>
  <B atr="one" atr1="something" />
  <E>nothing</E>
</document>

如何编写生成新的函数ptree删除了 <to_remove>节点?

最佳答案

ptree的value_type是std::pair< const Key, self_type >,所以可以迭代树,去掉对应的节点。以下是示例。

void remove(ptree &pt){
using namespace boost::property_tree;
    for (auto p = pt.begin(); p != pt.end();){
        if (p->first == "to_remove"){
            p = pt.erase(p);
        }
        else{
            remove(p->second);
            ++p;
        }
    }
}

关于c++ - 如何从 Boost.PropertyTree 复制子树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235589/

相关文章:

c++ - 为什么我不能递减 std::array::end()?

c++ - 为什么 std::vector 的相同成员的地址在 std::sort 的比较函数中不同?

c++ - 用整数哈希替换字符串名称的一些好方法是什么

json - boost::ptree 找到了吗?或者如何访问深层数组? C++

c++ - QListView,如何调整到最适合的大小?

c++ - 在无向图中找到一个环(boost)并返回它的顶点和边

c++ - 使用 Boost.Build 和 Boost.Test - 链接器错误

c++ - 在 AMD64 (Ubuntu 11.10) 上将 boost 编译为 i386

c++ - 仅使用 boost 库中的属性树

c++ - 如何手动创建具有不同 XML 属性的 boost ptree?