首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析XML时的NSXMLParserErrorDomain

解析XML时的NSXMLParserErrorDomain
EN

Stack Overflow用户
提问于 2012-03-30 05:02:43
回答 1查看 560关注 0票数 0

我遇到了一个奇怪的问题。我正在制作一个应用程序,它应该同时运行在iOS 4和5上。当我在iOS 5中解析XML时,它做得很好,我得到了输出,但是当我试图在iOS 4中做同样的事情时,我得到了这个错误"NSXMLParserErrorDomain error 31“。在

代码语言:javascript
复制
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;

我的XML是这样的。我需要解析项目标签中的标题标签.

代码语言:javascript
复制
<item> <title> <![CDATA[ Cynical approach to tar my reputation: Army    Chief on leaked letter ]]> </title> <link> <![CDATA[ ]]> </link>    <guid isPermaLink="false"> <![CDATA[ ]]> </guid> </item> <item>    <title> <![CDATA[ Major fire in scrap godown in suburban Mumbai ]]>    </title> <link> <![CDATA[ ]]> </link> <guid isPermaLink="false">    <![CDATA[ ]]> </guid> </item>

我的解析代码是:-

代码语言:javascript
复制
-(void)parseBN{

    NSString *URL=@"My XML's URL";

    // convert the path to a proper NSURL
    NSURL *xmlURL = [NSURL URLWithString:URL];
    CTNetworking *request= [CTNetworking requestWithUrl:xmlURL];
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(startParse:)];
    [request startRequest];

}

-(void)startParse:(CTNetworking*)response{

    if (response.responseStatusCode == 200 && rssParser == nil) {
        [stories removeAllObjects];

        NSString *myStr = [[NSString alloc] initWithData:[response responseData] encoding:NSWindowsCP1251StringEncoding];
        myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1251\"" withString:@""];


        NSData* aData = [myStr dataUsingEncoding:NSASCIIStringEncoding];


     //   NSXMLParser *parser = [[NSXMLParser alloc] initWithData:aData];

        rssParser = [[NSXMLParser alloc] initWithData:aData];
     //   rssParser = [[NSXMLParser alloc] initWithData:[response responseData]];
        // Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks.
        [rssParser setDelegate:self];

        // Depending on the XML document you're parsing
        [rssParser setShouldProcessNamespaces:NO];
        [rssParser setShouldReportNamespacePrefixes:NO];
        [rssParser setShouldResolveExternalEntities:NO];

        [rssParser parse];
    }


}

- (void)parserDidStartDocument:(NSXMLParser *)parser{   

}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    NSString * errorString = [NSString stringWithFormat:@"Unable to download story feed from web site (Error code %i )", [parseError code]];
    NSLog(@"error parsing XML: %@", errorString);

    UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    

It is not coming here.. so didn't paste the Inside code

}

我在谷歌搜索这个错误,每个人都说这个错误是因为未知的编码。因此,我也尝试使用"NSWindowsCP1251StringEncoding“,而不是默认编码。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-09 05:52:47

我终于让它起作用了..。

代码语言:javascript
复制
NSString *myStr = [[[NSString alloc] initWithData:[response responseData] encoding:NSWindowsCP1251StringEncoding] autorelease];
    myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1251\"" withString:@""];
    myStr = [myStr stringByReplacingOccurrencesOfString:@"US-ASCII" withString:@"UTF-8"];
    NSData* aData = [myStr dataUsingEncoding:NSASCIIStringEncoding];

    rssParser = [[NSXMLParser alloc] initWithData:aData];
    [rssParser setDelegate:self];
    [rssParser setShouldProcessNamespaces:NO];
    [rssParser setShouldReportNamespacePrefixes:NO];
    [rssParser setShouldResolveExternalEntities:NO];

    [rssParser parse];

通过NSString更改编码类型:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9937253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档