首页 > 学院 > 开发设计 > 正文

pugixml 丢失空格的解决方法

2019-11-10 18:55:44
字体:
来源:转载
供稿:网友

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, tabct_space = 8, // /r, /n, space, tabct_parse_cdata = 16,// /0, ], >, /rct_parse_comment = 32,// /0, -, >, /rct_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的有六个地方,经过本人的测试,没有深究其中的代码,注释上文所说的地方就可以在不影响功能(不影响我使用到的功能,可能有影响到的我没碰到)的情况下保留正文中的空格.


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表