使用pugixml保留空文本标记



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

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

加载选项parse_ws_pcdata_singleparse_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

文档

相关内容

  • 没有找到相关文章

最新更新