使用pugixml保留空文本标签

时间:2014-06-05 17:26:30

标签: pugixml

我正在尝试使用pugixml修改xml配置,通过boost :: serialization创建并由其他应用程序使用,因此我只需要更改文档的几个片段并保留所有其他部分相同。

某些节点可能以<value></value>的形式存储空字符串。装载后保存(使用pugi)此节点将更改为<value />。在此之后,boost :: serialization无法解析此类文件。

加载选项parse_ws_pcdata_singleparse_ws_pcdata仅在。之间存在空格时才有效。

我没有找到保存选项来保存<value></value>格式的空节点。

有什么方法可以保持开放性和开放性关闭标签,文本间没有文字?

3 个答案:

答案 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

查看 https://pugixml.org/docs/manual.html#saving.options 中的文档