boost::property_tree 改变元素的顺序

boost::property_tree change order of elements

我使用 boost 属性 树写了一些不错的 xml 文件并且一切正常......但我想以某种方式确保一个特定的块位于 xml 文件。这个块是关于软件和一些常规设置的通用块,如果这个块位于开头,对人类读者来说会很好。不幸的是,我不能确定这个块总是第一个被写入的......还有其他简单的解决方案或解决方法吗?

只需使用 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>