【问题标题】:no end of line in boost property tree xml writer outputboost属性树xml编写器输出中没有行尾
【发布时间】:2013-12-16 18:26:23
【问题描述】:

考虑以下使用 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>

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

P.S.:我正在使用带有 gcc 4.6.3 和 boost 1.48 的 Ubuntu 12.04 LTS。

【问题讨论】:

标签: c++ xml boost boost-propertytree


【解决方案1】:

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

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

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

【讨论】:

  • 在带有 Boost 1.57 的 MS Visual Studio 2013 上测试:xml_write_settings 对象必须在 std::string 而不是 char 上模板化——它变为:xml_writer_settings&lt;std::string&gt; settings(' ', 4);
  • @Julien-L,正确。如果是到控制台:` boost::property_tree::xml_writer_settings<:string> settings(' ', 4); boost::property_tree::write_xml(std::cout, pt, settings);`
【解决方案2】:

在 write_xml 时使用 设置

设置参数

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

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

【讨论】:

    【解决方案3】:

    使用(至少)提升 1.58,您可以试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      相关资源
      最近更新 更多