Ale*_*x F 7 c++ xml boost boost-propertytree
我有以下XML文件:
<xml version="1.0" encoding="utf-8"?>
<Data>
<Parameter1>1</Parameter1>
</Data>
我想在Data节点中添加一个新节点:Parameter2 ="2".此代码不起作用,保存的文件仍然只包含一个参数:
boost::property_tree::ptree tree;
boost::property_tree::ptree dataTree;
read_xml("test.xml", tree);
dataTree = tree.get_child("Data");
dataTree.put("Parameter2", "2");
boost::property_tree::xml_writer_settings w(' ', 4);
write_xml("test.xml", tree, std::locale(), w);
如果我在dataTree.put之后添加这两行,我得到正确的结果:
tree.clear();
tree.add_child("Data", dataTree);
我不喜欢这个解决方案,因为它会产生更复杂的树结构问题.是否可以在不删除/添加子节点的情况下更新属性树?
J. *_*eja 10
您的代码几乎是正确的,这是更新子节点的正确方法.
但是,有一个小错误.键入时:
dataTree = tree.get_child("Data");
Run Code Online (Sandbox Code Playgroud)
您为dataTree分配了"子"的副本.因此,下一行是指副本,而不是您的层次结构.你应该写:
boost::property_tree::ptree &dataTree = tree.get_child("Data");
Run Code Online (Sandbox Code Playgroud)
所以你获得了对孩子的参考.
完整的例子是:
using namespace boost::property_tree;
ptree tree;
read_xml("data.xml", tree);
ptree &dataTree = tree.get_child("Data");
dataTree.put("Parameter2", "2");
xml_writer_settings<char> w(' ', 4);
write_xml("test.xml", tree, std::locale(), w);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8683 次 |
| 最近记录: |