我正在尝试使用pugixml修改xml配置,通过boost :: serialization创建并由其他应用程序使用,因此我只需要更改文档的几个片段并保留所有其他部分相同。
某些节点可能以<value></value>
的形式存储空字符串。装载后保存(使用pugi)此节点将更改为<value />
。在此之后,boost :: serialization无法解析此类文件。
加载选项parse_ws_pcdata_single
和parse_ws_pcdata
仅在。之间存在空格时才有效。
我没有找到保存选项来保存<value></value>
格式的空节点。
有什么方法可以保持开放性和开放性关闭标签,文本间没有文字?
答案 0 :(得分:2)
没有随时可用的选项。
很容易改变pugixml来输出你需要的XML(可能比修复boost :: serialization更容易......):
在第3249行的pugixml.cpp中,有以下代码:
else if (!node.first_child())
writer.write(' ', '/', '>', '\n');
如果您使用缩进格式,请删除这两行(如果您使用的是format_raw,那么上面的代码类似)。
答案 1 :(得分:2)
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);
答案 2 :(得分:1)
如果仍然有人遇到此问题,则无需更改来源。编写树时只需使用此标志:
pugi::format_no_empty_element_tags