如何在Boost属性树中重命名节点/元素?

Kap*_*nir 4 c++ boost boost-propertytree

例如,我具有以下结构的boost属性树(通过使用xml或其他方式读取流来创建):

<A>
  <B>
    <C></C>
  </B>
</A>
Run Code Online (Sandbox Code Playgroud)

如何使用新的键:N 将现有树元素B 重命名为新元素。因此,调用此固定树的write_xml应该给出新的xml结构:

<A>
  <N>
    <C></C>
  </N>
</A>
Run Code Online (Sandbox Code Playgroud)

请提供代码(如果可能的话),或者解释为什么不能这样做。备注:将C下的子树附加到新生成的根也是可以接受的,但是优先级是直接重命名。

seh*_*ehe 5

好吧,那是可能的。发送支票代码

Live On Coliru

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>

using boost::property_tree::ptree;

int main() {
    std::istringstream iss(R"(<A><B><C></C></B></A>)");

    ptree pt;
    read_xml(iss, pt);

    pt.add_child("A.N", pt.get_child("A.B"));
    pt.get_child("A").erase("B");

    write_xml(std::cout, pt);
}
Run Code Online (Sandbox Code Playgroud)

版画

<?xml version="1.0" encoding="utf-8"?>
<A><N><C/></N></A>
Run Code Online (Sandbox Code Playgroud)