【问题标题】:boost::property_tree xml pretty printing, formattingboost::property_tree xml 漂亮的打印,格式化
【发布时间】:2014-01-15 12:40:49
【问题描述】:

我正在关注 Five Minute Tutorial,我得到了文件 debug_settings_out.xml 作为输出(不出所料)。

但我的问题是,它的格式不正确。它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<debug><filename>debug.log</filename><level>2</level></debug>

我希望它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<debug>
    <filename>debug.log</filename>
    <level>2</level>
</debug>

因为它也应该可以手动编辑。 我怎样才能做到这一点?

我已经找到了可以传递给解析器的settings,但它们都没有给我想要的行为。

【问题讨论】:

    标签: c++ xml boost boost-propertytree


    【解决方案1】:

    PropertyTree 的文档非常糟糕(我最近开始改进它)。您需要做的是将正确的 xml_writer_settings 对象传递给 write_xml。

    https://github.com/boostorg/property_tree/blob/master/include/boost/property_tree/detail/xml_parser_writer_settings.hpp

    write_xml(filename, tree, std::locale(),
              xml_writer_make_settings(' ', 4));
    

    【讨论】:

    • 谢谢。你能给我解释一下,或者告诉我在哪里解释,(' ', 4) 是做什么的?我还有什么其他选择?
    • 第一个参数是缩进字符,唯一其他明智的选择是制表符的 '\t'。第二个是为每个缩进重复该字符的频率。没有其他选择。
    • 万一其他人在这里结束,并且无法让它工作:当写入流而不是文件时,没有语言环境参数。 IE。这有效:write_xml(std::cout, tree, xml_writer_make_settings(' ', 4));
    • 是否有机会编写编译器/链接器设置以使用此 xml_writer_make_settings ?我一直没有在这个范围内声明 - 即使我在我的代码中使用了 ptree else
    • 这是旧的,但如果有人来这里寻找解决方案,我通过直接使用 xml_writer_make_settings 创建的类发现成功,如 write_xml(stream, tree, xml_parser::xml_writer_settings<:>(' ', 4));模板类型说明符似乎是必需的。 (property_tree 范围也是如此。)
    猜你喜欢
    • 2023-03-07
    • 2011-05-06
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2016-02-25
    • 2012-03-07
    相关资源
    最近更新 更多