pugixml 丢失空格的解决方法

pugixml 是一个非常好用的c++ xml解析库,速度快,占用内存小,支持xpath,且开源,可以说是c++ xml解析库的首选.

但近日发现,使用pugixml解析xml.然后再将其保存成xml文件的时候,会造成空格丢失的情况.经过一番跟踪调试,终于发现问题所在,遂在此记录.

在pugixml读入buffer进行解析的时候,在pugixml.cpp的第3406行(pugixml1.7) 有这么一行代码

PUGI__SKIPWS(); // Eat whitespace if no genuine PCDATA here. 

该行代码是一个宏,对应的是

#define PUGI__SKIPWS()              { while (PUGI__IS_CHARTYPE(*s, ct_space)) ++s; }

其中 PUGI__IS_CHARTYPE 是一个检查是不是该字节是不是对应的类型,

ct_space是chartype_t的一个类型,chartype_t的全部内容如下

enum chartype_t
{
ct_parse_pcdata = 1, // \0, &, \r, <
ct_parse_attr = 2, // \0, &, \r, ', "
ct_parse_attr_ws = 4, // \0, &, \r, ', ", \n, tab
ct_space = 8, // \r, \n, space, tab
ct_parse_cdata = 16, // \0, ], >, \r
ct_parse_comment = 32, // \0, -, >, \r
ct_symbol = 64, // Any symbol > 127, a-z, A-Z, 0-9, _, :, -, .
ct_start_symbol = 128 // Any symbol > 127, a-z, A-Z, _, :
};

从这里我们就可以看到了,如果是\r, \n, space, tab的话 pugixml是会自动跳过的

全文使用PUGI__SKIPWS的有六个地方,经过本人的测试,没有深究其中的代码,注释上文所说的地方就可以在不影响功能(不影响我使用到的功能,可能有影响到的我没碰到)的情况下保留正文中的空格.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值