为什么 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>
我正在使用 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>