NSXMLParser心得及重复覆盖问题解决
2013-12-12 10:50
211 查看
我在用这个iOS sdk中的这个类的时候,一直会出现一些莫名其妙的小问题,曾经也做过安卓手机应用这方面的工作,都没问题,但到苹果这边就不行了,就是在解析xml的时候一对标签经常会被解析两遍,第一遍可以读取到正常内容,第二遍则是空内容然后将第一次的内容覆盖,导致最后存储值为空。
一开始我将标签解读移动到标签结束方法中进行,基本解决了重复读取同一对标签的问题,但是我4个标签中却总有一个标签(<url> </url>)读取仍然出现重复覆盖问题,其余不重复覆盖,而这些的写法都是一样的,所以我怎么也找不出现在是怎么回事了,只好用一些土办法把漏洞补上。第一个方法就是建立一个static整形变量记录读取url标签的次数,每次加一,然后在判断进入url的赋值条件中 && 次数%2 == 0,重复读取的情况得到很好的改善,可是。。仍然有问题,就是最后一次偶数莫名其妙也是空的,……于是,我便想办法要把这个未知的最后一个数去掉,解决办法就是每一次都记录下上一次的有效值,然后在结束标志出,将最后一次不正常的内容还原回去。。。
这样莫名其妙乱七八糟搞来搞去(不用去完全理解我的意思和在意细节),后来我发现我傻了,其实有一个很简单很有效的方法,就是判断url内容的长度!如果为空,直接将它无视或去掉即可,多好啊!由于我的url内容必定带有『http://』所以我将判断语句写成:
结果完美运行,哇哈哈,这真是个不错的算法有木有=。=以后再也不用担心xml重复覆盖问题了!!另外,xml解析中,一次的读取内容可能会被断成两次的问题,解决办法就是用可变字符串,然后在一次里面用appendString方法而不用NSMutableString stringWithString:方法,只要在最后结束当前标签的时候将可变字符串的值重置释放为nil就可以了。
一开始我将标签解读移动到标签结束方法中进行,基本解决了重复读取同一对标签的问题,但是我4个标签中却总有一个标签(<url> </url>)读取仍然出现重复覆盖问题,其余不重复覆盖,而这些的写法都是一样的,所以我怎么也找不出现在是怎么回事了,只好用一些土办法把漏洞补上。第一个方法就是建立一个static整形变量记录读取url标签的次数,每次加一,然后在判断进入url的赋值条件中 && 次数%2 == 0,重复读取的情况得到很好的改善,可是。。仍然有问题,就是最后一次偶数莫名其妙也是空的,……于是,我便想办法要把这个未知的最后一个数去掉,解决办法就是每一次都记录下上一次的有效值,然后在结束标志出,将最后一次不正常的内容还原回去。。。
这样莫名其妙乱七八糟搞来搞去(不用去完全理解我的意思和在意细节),后来我发现我傻了,其实有一个很简单很有效的方法,就是判断url内容的长度!如果为空,直接将它无视或去掉即可,多好啊!由于我的url内容必定带有『http://』所以我将判断语句写成:
if ([_tagName isEqualToString:@"url"]) { if (currentElementValue.length > 4) { ... } }
结果完美运行,哇哈哈,这真是个不错的算法有木有=。=以后再也不用担心xml重复覆盖问题了!!另外,xml解析中,一次的读取内容可能会被断成两次的问题,解决办法就是用可变字符串,然后在一次里面用appendString方法而不用NSMutableString stringWithString:方法,只要在最后结束当前标签的时候将可变字符串的值重置释放为nil就可以了。
相关文章推荐
- 解决循环遍历 id重复 (后一张图片覆盖前一张图片) 的问题
- gridview首位置重复加载情况下,解决首位置被Last位置信息覆盖问题
- Yarn 解决 npm package无序覆盖 重复下载问题
- spring bean id重复覆盖的问题解决
- hdu2295 Radar DLX解决重复覆盖问题
- spring bean id重复覆盖的问题解决
- DANCING LINKS解决重复覆盖问题
- Spring bean id 重复覆盖的问题解决
- 有效解决C# Random生成随机数重复的问题
- 解决Cordova开发iOS的app界面被状态栏覆盖的问题
- 【09】vue.js — 解决添加重复数据报错问题
- hpp文件解决类成员函数重复定义的问题
- 如何解决p6spy日志记录sql语句重复的问题
- 解决 hybird 应用中重复获取 WebView,导致页面元素无法识别的问题
- Android自动化测试之Monkeyrunner解决ID重复问题
- MQ如何解决消息的顺序问题和消息的重复问题
- Python字符串的encode与decode研究心得乱码问题解决方法
- 注册登录过程点滴(三):解决MVC3中使用Ajax.BeginForm会重复提交数据的问题
- 一个C#随机数的问题,解决随机数重复
- ListView中带有CheckBox时,解决CheckBox重复选择问题的一个不错方案