[杂项]Xerces-C的进展 |
小工头 发表于 2005/5/10 21:52:14 | 看了俺转的那篇文章之后,俺突然有了新的想法:Xerces-C本身解析和显示中文没有问题,但是缺少把XMLCh类型转到普通的char类型的合适的方法。可是,要处理的XML文件一开始的时候就是普通的字符串。俺要做的工作只是把字符串里多余的空格和回车去掉而已,解析之间把这个工作做完不就得了,干嘛非得解析之后对着XMLCh愁眉苦脸?
这个想法让俺眼前一亮,这么简单的想法,以前怎么就没想到呢?回车的处理很简单,全都去掉就行了。即使XML元素之间有回车,去掉了也不影响解析。空格处理起来相对麻烦一点,要把多于1个的连续的空格变成一个。前一阵子用C++写程序,一开始想得好好的,到后面全都走了样,成员和方法的声明改了一遍又一遍。原本以为C++可以省去一切动态分配空间带来的释放问题,这次发现有的成员变量被多个方法共享,还是需要一遍又一遍的释放……头大!这次用C++的格式,但是再也不想用私有成员变量了,OOP的编程思想掌握得还不好啊,sigh。
俺要实现的是一个字符操作的类,主要功能是从字符串中删去指定的字符和字符串,类似word里的退格操作。俺不是很确定C的函数有没有提供现成的接口,索性自己写了。这东西想起来容易,做起来还有点难度。两个缓冲区指针,还有一个指针在循环体中指向当前要处理的字符串的开头,一个指针指向应当删除的部分的尾巴……一堆指针搅来搅去,一不留神就把值给赋错了。
折腾了几个来回之后,俺的字符串操作类终于可以运行了。写了一个简单的XML文件,一次过关!俺高高兴兴用正式的XML文件来试,结果崩溃了……调试了一下,原来是释放缓冲区的时候出了错。俺狂倒,怎么会这样?唯一的区别就是正式的XML文件比较大,有十几K,难道长度数据溢出了?把int全都改成long,还是出错。来回玩了好几次,终于搞明白了。确定删除后的字符串长度的时候用了一个strlen(),不知道为什么,这东东返回的的长度值比真正的值大了一点,所以缓冲区溢出了。标准C函数也不能完全信赖呀……换个计算方法,果然成功了。
用若干XML文件实验,确实可以去除多余的空格和回车。去除回车的时候发现,使用'\n'作为关键字没用,需要使用"\r\n"才可以。还好C++支持多态,三下两下就改过来了,测试程序也用不着大改。
|
|
|

.: 公告
有人的地方就有恩怨 有恩怨的地方就是江湖 人在江湖漂,谁能不挨刀 |
|
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
.: 我的分类(专题)
|

.: 最新日志
.: 最新回复
|

blog名称:少年包工头的工作日记 日志总数:629 评论数量:1458 留言数量:56 访问次数:8974094 建立时间:2004年12月8日 |
|

.: 留言板
|

.: 链接
|

|