parser:parseErrorOccurred31#parser:parseErrorOccur

parser:parseErrorOccurred31#parser:parseErrorOccur,第1张

概述//取XML文件的前40个字节        NSData * xmldata = [self.ItemData subdataWithRange:NSMakeRange(0,40)];         //以UTF-8编码进行解码        NSString *xmlstr = [[NSString alloc] initWithData:xmldata encoding:NSUTF
//取XML文件的前40个字节NSData*xmldata=[self.ItemDatasubdataWithRange:NSMakeRange(0,40)];//以UTF-8编码进行解码Nsstring*xmlstr=[[Nsstringalloc]initWithData:xmldataenCoding:NSUTF8StringEnCoding];//NSLog(@"XMLheader:%@",xmlstr);//搜索GB2312,如果找到,就对整个文件进行编码转换if([xmlstrrangeOfString:@"\"GB2312\""options:NSCaseInsensitiveSearch].location!=NSNotFound){//NSLog(@"GB2312enCodingfounded.");nsstringencodingenc=CFStringConvertEnCodingTonsstringencoding(kcfStringEnCodingGB_18030_2000);Nsstring*utf8str=[[[Nsstringalloc]initWithData:self.ItemDataenCoding:enc]autorelease];utf8str=[utf8strstringByReplacingOccurrencesOfString:@"\"GB2312\""withString:@"\"utf-8\""options:NSCaseInsensitiveSearchrange:NSMakeRange(0,40)];NSData*newData=[utf8strdataUsingEnCoding:NSUTF8StringEnCoding];self.ItemData=newData;}

GB2312或GBK编码的网页,要先用gb编码解码,然后替换其中的gb字符串,再用utf8编码成data给parser就能解析中文网页了。


NSXMLParser 将停止解析在遇到特殊字符后


我读一个 XML 文件从谷歌天气 API 和解析它使用 NSXMLParser。城市问题是巴黎。这是我得到的简短 xml 输出

<?xmlversion="1.0"?><xml_API_replyversion="1"><weathermodule_ID="0"tab_ID="0"mobile_row="0"mobile_zipped="1"row="0"section="0"><forecast_information><citydata="Paris,Île-de-France"/><postal_codedata="Paris"/><latitude_e6data=""/><longitude_e6data=""/>......

现在我用来削去此 xml 的代码是

Nsstring*address=@"http://www.Google.com/ig/API?weather=Paris";NSURL*URL=[NSURLURLWithString:address];NSXMLParser*parser=[[NSXMLParseralloc]initWithContentsOfURL:URL];[parsersetDelegate:self];[parserparse];...-(voID)parser:(NSXMLParser*)parserdIDStartElement:(Nsstring*)elementnamenamespaceURI:(Nsstring*)namespaceURIqualifIEdname:(Nsstring*)qualifiednameattributes:(NSDictionary*)attributeDict{NSLog(@"XMLParser1...elementname...%@",elementname);}

这是我获得上述 xml 的输出

XMLParser1...elementname...xml_API_replyXMLParser1...elementname...weatherXMLParser1...elementname...forecast_information

问题是它分析的所有标记,直到它到达"城市数据"因为巴黎 î l e de 法国,然后它就会停止的名称中有非 ascii 字符。它不会处理之后像 postal_code 的标签。纬度、 经度等。

所以我的问题是,有什么办法可以从返回的 URL XML 字符串中删除所有非 ascii 字符吗?

解决方法 1:

还行。我已经解决了此问题。这是怎么弄来的工作。

我首先做的就是用特殊字符的 URL 的 XML。然后我去掉从 XML 字符串的所有特殊字符。然后我将字符串转换为 NSdata 然后把 nsdata 对象传递给我的 NSXMLParser。因为它有没有更多特殊字符 NSXMLParser 是快乐。

这里是为任何人在将来可能会遇到的代码。大感谢您对这篇文章作出了贡献的人 !

Nsstring*address=@"http://www.Google.com/ig/API?weather=Paris";NSURL*URL=[NSURLURLWithString:address];NSError*error;Nsstring*XML=[NsstringstringWithContentsOfURL:URLenCoding:NSASCIIStringEnCodingerror:&error];//REMOVEALLNON-ASCIICHaraCTERSNSMutableString*asciiCharacters=[NSMutableStringstring];for(NSIntegeri=32;i<127;i++){[asciiCharactersappendFormat:@"%c",i];}NSCharacterSet*nonAsciiCharacterSet=[[NSCharacterSetcharacterSetWithCharactersInString:asciiCharacters]invertedSet];XML=[[XMLcomponentsSeparatedByCharactersInSet:nonAsciiCharacterSet]componentsJoinedByString:@""];NSData*data=[XMLdataUsingEnCoding:NSUTF8StringEnCoding];NSXMLParser*parser=[[NSXMLParseralloc]initWithData:data];[parsersetDelegate:self];[parserparse];
总结

以上是内存溢出为你收集整理的parser:parseErrorOccurred31#parser:parseErrorOccur全部内容,希望文章能够帮你解决parser:parseErrorOccurred31#parser:parseErrorOccur所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1088014.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存