boost属性树xml编写器输出没有结束

no end of line in boost property tree xml writer output

本文关键字:输出 结束 属性 xml boost      更新时间:2023-10-16

考虑使用boost::property_tree:的以下代码

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
using namespace boost::property_tree;
int main() {
    ptree model_tree;
    model_tree.add("calibrated", "true");
    model_tree.add("model.<xmlattr>.label", "label");
    model_tree.add("model.activity.<xmlattr>.type", "fixed");
    write_xml("test.xml", model_tree);
}

通过编译和执行程序,我得到以下输出:

<?xml version="1.0" encoding="utf-8"?>
<calibrated>true</calibrated><model label="label"><activity type="fixed"/></model>

这并不是我所期望的,因为既没有换行也没有缩进。我想得到以下替代:

<?xml version="1.0" encoding="utf-8"?>
<calibrated>true</calibrated>
<model label="label">
    <activity type="fixed"/>
</model>

这是一个错误,还是有获得后一个输出的选项?如有任何帮助,我们将不胜感激。

附言:我使用的是Ubuntu 12.04 LTS,带有gcc 4.6.3和boost 1.48。

与此同时,我找到了答案。应该使用xml_writer_settings,即:

xml_writer_settings<char> settings(' ', 4);
write_xml("test.xml", model_tree, std::locale(), settings);

构造函数中的第一个参数是用于缩进的字符,而第二个参数是缩进长度。由于该解决方案没有记录在案,希望这将帮助其他面临类似问题的人。

在写入_xml 时使用设置

设置参数

1.字符缩进
2:重复次数

boost::property_tree::xml_writer_settings<char> settings('t', 1);
write_xml("xmlfilePath.xml", pt, std::locale(), settings);

使用(至少)boost 1.58,您可以尝试以下操作:

pt::write_xml( "test.xml", 
                model_tree,  
                std::locale(),
                pt::xml_writer_make_settings< std::string >( ' ', 4) );