如何在 boost 属性 树中重命名 node/element?
How to rename node/element in boost property tree?
例如,我有以下结构的 boost 属性 树(通过使用 xml 或以不同方式读取流创建):
<A>
<B>
<C></C>
</B>
</A>
如何将 现有 树元素 B 重命名为具有新键的新元素:N。因此调用此固定树的 write_xml 应该给出新的 xml结构:
<A>
<N>
<C></C>
</N>
</A>
如果可能,请提供代码或解释为什么不能。
备注:将C下的子树附加到新生成的根也可以,但优先直接重命名。
嗯,那么,这是可能的。 发送代码检查
#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);
}
版画
<?xml version="1.0" encoding="utf-8"?>
<A><N><C/></N></A>
例如,我有以下结构的 boost 属性 树(通过使用 xml 或以不同方式读取流创建):
<A>
<B>
<C></C>
</B>
</A>
如何将 现有 树元素 B 重命名为具有新键的新元素:N。因此调用此固定树的 write_xml 应该给出新的 xml结构:
<A>
<N>
<C></C>
</N>
</A>
如果可能,请提供代码或解释为什么不能。 备注:将C下的子树附加到新生成的根也可以,但优先直接重命名。
嗯,那么,这是可能的。 发送代码检查
#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);
}
版画
<?xml version="1.0" encoding="utf-8"?>
<A><N><C/></N></A>