0

私はいくつか持っていboost::property_tree::ptreeます。特定のタグ名を持ついくつかの要素を削除したツリーが必要です。たとえば、ソースの xmlptreeは次のとおりです。

<?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>ノードで新しいものを生成する関数を作成する方法は?

4

2 に答える 2

1

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;
        }
    }
}
于 2014-06-16T02:20:55.660 に答える