我试图使用pugixml来修改xml配置,通过boost::序列化创建并由其他应用程序使用,所以我只需要更改文档的几个片段并保留所有其他部分相同。
一些节点可能以<value></value>
的形式存储空字符串。后负载&保存(用pugi)此节点更改为<value />
。在此之后,boost::serialization无法解析这样的文件。
加载选项parse_ws_pcdata_single
和parse_ws_pcdata
只有在中间有空白时才有效。
我没有找到在<value></value>
中保存空节点的保存选项。
是否有办法保持开放&结束标记之间没有文本?
没有现成的选项。
很容易更改pugixml以输出所需的XML(可能比修复boost::serialization…更容易):
在pugixml.cpp的第3249行左右,有这样的代码:
else if (!node.first_child())
writer.write(' ', '/', '>', 'n');
如果使用缩进格式,只需删除这两行(如果使用format_raw,上面有类似的代码)。
Pugixml已经更新,这个问题的答案已经改变
这是Pugixml版本1.6
为所有节点生成结束标签,
修改pugixml.cpp: 3503行
从PUGI__FN bool node_output_start(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags)
PUGI__FN void node_output_end(xml_buffered_writer& writer, xml_node_struct* node);
PUGI__FN bool node_output_start(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags)
修改pugixml.cpp: 3516行
从writer.write(' ', '/', '>');
writer.write('>');
node_output_end(writer, node);
如果有人仍然遇到这个问题,您不需要更改源代码。在编写树时,只需使用此标志:
pugi::format_no_empty_element_tags
见https://pugixml.org/docs/manual.html#saving.options