pugixml 丢失空格的解决方法
来源:互联网 发布:淘宝服装图标 编辑:程序博客网 时间:2024/06/05 10:04
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的有六个地方,经过本人的测试,没有深究其中的代码,注释上文所说的地方就可以在不影响功能(不影响我使用到的功能,可能有影响到的我没碰到)的情况下保留正文中的空格.
- pugixml 丢失空格的解决方法
- 丢失ntldr的解决方法
- Session丢失的解决方法
- Session丢失的解决方法
- 网卡丢失的解决方法
- pugixml库的使用
- pugixml库的使用
- pugixml
- php session 丢失的解决方法!
- root密码丢失的解决方法
- ConnectionString密码丢失的解决方法
- Linux密码丢失的解决方法
- R文件丢失的解决方法
- R文件丢失的解决方法
- R文件丢失的解决方法
- mfc100u.dll丢失的解决方法
- ConnectionString密码丢失的解决方法
- mfc100u.dll丢失的解决方法
- Android中自定义属性的使用
- poj1723 中位数的应用
- 【典型例题】遍历文件夹下面的文件;(递归算法)
- A+B (III)
- C语言栈帧破坏
- pugixml 丢失空格的解决方法
- 网络流Dinic
- 整合 spring 4(包括mvc、context、orm) + mybatis 3 示例
- 欢迎使用CSDN-markdown编辑器
- 2.1 VB语言基础——关键字和标识符
- Java Map《自己记录记忆》
- Binary Search Tree analog
- 初识CPU卡、SAM卡
- Java集合框架总结