保留使用pugixml时的空文本标签

3
我正在尝试使用pugixml修改xml配置。该配置是通过boost :: serialization创建并由其他应用程序使用,因此我需要仅更改几个文档片段并保留所有其他部分不变。
某些节点可能以形式存储空字符串。在使用pugi进行加载和保存后,这些节点会变成。之后,boost :: serialization无法解析此类文件。
如果存在空格,则加载选项parse_ws_pcdata_single和parse_ws_pcdata才有效。
我没有找到保存空节点以形式的选项。
是否有任何方法可以保留零文本位于其间的开放和关闭标签?
3个回答

2

目前没有可用的选项。

将pugixml更改为输出所需的XML非常容易(可能比修复boost :: serialization更容易):

在pugixml.cpp的第3249行左右,有以下代码:

        else if (!node.first_child())
            writer.write(' ', '/', '>', '\n');

如果您正在使用缩进格式(如果您正在使用format_raw,则在稍上方有类似的代码),请删除这两行代码。

是的,你说得对。我的同事也建议了这个。如果有人使用“raw”输出,还需要修复另一个地方:第3235行。 - magras

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);

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接