继续与Xerces-C搏斗 |
小工头 发表于 2005/5/11 21:32:05 | 绕过中文字符处理这一关,问题就比较明确了。Xerces-C自带一个ierater的例子,实现了从XML生成DOM树然后遍历的功能。俺只要在这个基础上加入查找/替换的代码就可以了。
说起来简单,做起来难。俺面对的需求是:set id="***" where date="###"(用SQL语言来写真是简单明了……以后要学习XPath)。因此,需要首先找到符合条件的项将其定位,然后再对将要修改的项进行操作。iterater这个例子仅仅针对一项进行了操作,所以俺得改。
根据上面的分析,接口的输入参数会很长。查找的项的名称,查找的项的关键字,待替换的项的名称,还有准备替换的值,这四项肯定要。为了防止缓冲区溢出造成程序崩溃,需要考虑恶意输入参数的问题,所以还要加上这四项的长度。然后还要确定查找范围。只在元素范围找?只在属性范围找?还要支持组合查找……啊~~~~~晕了。
连续想了几个小时,头都疼了。最后决定不想那么复杂了,先把基础功能实现了再说。不想把参数表搞得那么麻烦,决定分成两个,接口,一个负责查找,一个负责替换。这样就简单多了,两个接口的代码基本上是一样的,只有两三行不一样。从代码简化的角度来说,这是极大的浪费。可是,从提高程序可读性的角度来说,这是一个不错的选择。看来一味追求代码重用也不行。今天又破除了一个迷信。
测试的时候发现了问题。为了实现全文查找并替换的功能,必须交替调用Find()和Replace()。问题是,调用Find()之后,暂存的指针指向当前要处理的项;而调用Replace()之后,指针并没有改变。此时再调用Find()就成了死循环。试着用iterater例子里面的代码写了一个FindNext(),发现不起作用。看来还要继续研究。
|
|
|

.: 公告
有人的地方就有恩怨 有恩怨的地方就是江湖 人在江湖漂,谁能不挨刀 |
|
« | 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 访问次数:8973938 建立时间:2004年12月8日 |
|

.: 留言板
|

.: 链接
|

|