2012-03-30 8 views
0

Я получаю странную проблему. Я делаю приложение, которое должно работать на обоих iOS 4 & 5. Когда я разбираю свой XML в iOS 5 Он отлично работает, и я получаю свой вывод, но когда я пытаюсь сделать то же самое в iOS 4, Я получаю эту ошибку «Ошибка NSXMLParserErrorDomain 31». вNSXMLParserErrorDomain при разборе XML

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError; 

мой XML, как это .. мне нужно разобрать название тега внутри тега Item ...

<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> 

Мой синтаксический код ID это: -

-(void)parseBN{ 

    NSString *[email protected]"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 

} 

Я искал в google эту ошибку, и все говорят, что эта ошибка возникает из-за Unknown Encoding .. поэтому я попытался с помощью «NSWindowsCP1251StringEncoding» также вместо кодировки по умолчанию , Любая помощь будет оценена.

ответ

0

Наконец я получил это работает ...

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 :)

Смежные вопросы