为什么 boost 属性 tree xml 序列化程序不能保留多行值?

why boost property tree xml serializer cannot preserve multi-line values?

我正在使用 boost 属性 树 (v.1.72.5) 来读写 xml 文件。我知道根据 the documentation:

The XML storage encoding does not round-trip perfectly. A read-write cycle loses trimmed whitespace, low-level formatting information, and the distinction between normal data and CDATA nodes. Comments are only preserved when enabled. A write-read cycle loses trimmed whitespace; that is, if the origin tree has string data that starts or ends with whitespace, that whitespace is lost.

根据这个已知的行为,如果我 read/write 一个 xml 文件 没有 使用 boost::property_tree::xml_parser::trim_whitespace 选项,我的 xml 文件可以是这样的:

  <MyInfo id="info_1" title="" description="" >
     
     
     
     234
     <My_Nums>
        <My_Num>0</My_Num>
        <My_Num>1</My_Num>
     </My_Nums>
  </MyInfo>

在这种情况下,读取 MyInfo 的值(即 234)失败。但是如果我使用 boost::property_tree::xml_parser::trim_whitespace 选项,我可以正确读取值(即 234),但是我所有的多行字符串都被转换为单行值(换行符被删除。)

如何正确读取 MyInfo 标记的值,同时保留我的多行值?

正如@sehe 在评论中提到的,这就是 boost 属性 树的实现方式。我认为避免此问题的最佳解决方法是始终使用 boost::property_tree::xml_parser::trim_whitespace 属性并将值分配给特定标记。使用这种方法,我的 xml 文件将始终是这样的:

  <MyInfo id="info_1" title="" description="" >
     <value>234</value>
     <My_Nums>
        <My_Num>0</My_Num>
        <My_Num>1</My_Num>
     </My_Nums>
  </MyInfo>