boost :: property_tree改变元素的顺序

时间:2017-11-07 14:43:20

标签: boost boost-propertytree

我使用boost属性树来编写一些不错的xml文件,一切正常......但我想以某种方式确保一个特定的块位于xml文件的开头。这个块是关于软件和一些常规设置的一般块,对于人类读者而言,这个块在一开始就是很好的。不幸的是,我不能确保这个块始终是第一个写的...是否有另一个简单的解决方案或解决方法?

1 个答案:

答案 0 :(得分:1)

只需使用insert

ptree pt;

pt.add("a.c.d", "hello");
pt.add("a.e", "world");
pt.add("a.b", "bye");

write_xml(std::cout, pt, boost::property_tree::xml_writer_make_settings<std::string>(' ', 2));

打印

<?xml version="1.0" encoding="utf-8"?>
<a>
  <c>
    <d>hello</d>
  </c>
  <e>world</e>
  <b>bye</b>
</a>

使用insert在特定位置插入节点:

// let's move `b` to the start:
ptree pt;

pt.add("a.c.d", "hello");
pt.add("a.e", "world");
auto& a = pt.get_child("a");
a.insert(a.begin(), {"b", ptree{"bye"}});

write_xml(std::cout, pt, boost::property_tree::xml_writer_make_settings<std::string>(' ', 2));

打印

<?xml version="1.0" encoding="utf-8"?>
<a>
  <b>bye</b>
  <c>
    <d>hello</d>
  </c>
  <e>world</e>
</a>