您的位置:首页 > 其它

NSXMLParser心得及重复覆盖问题解决

2013-12-12 10:50 211 查看
我在用这个iOS sdk中的这个类的时候,一直会出现一些莫名其妙的小问题,曾经也做过安卓手机应用这方面的工作,都没问题,但到苹果这边就不行了,就是在解析xml的时候一对标签经常会被解析两遍,第一遍可以读取到正常内容,第二遍则是空内容然后将第一次的内容覆盖,导致最后存储值为空。
一开始我将标签解读移动到标签结束方法中进行,基本解决了重复读取同一对标签的问题,但是我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就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: