2012-11-03 28 views
0

我無法解析XML文件的NSXMLParser和奇怪的編碼一個XML

本來,我宣佈我的解析器:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"download.rss" withExtension:@"webintents"]; 
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 

解析的時候,我遇到錯誤

NSXMLParserErrorDomain錯誤9

我檢查它是NSXMLParserInvalidCharacterEr ROR。

解析器運行多個標記並遇到標記處的錯誤。

然後我改變了聲明進行迭代編碼爲:

NSError *errorOfStr = nil; 
NSStringEncoding encoding; 
NSString *xmlFeedStr = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"download.rss" withExtension:@"webintents"] usedEncoding:&encoding error:&errorOfStr]; 

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[xmlFeedStr dataUsingEncoding:encoding allowLossyConversion:YES]]; 

但草簽變量「xmlFeedStr」當我遇到錯誤。檢查 「errorOfStr」,我看到了eror:

可可誤差264

我檢查,這是NSFileReadUnknownStringEncodingError

在那之後,我試圖迫使一些編碼爲NSUTF8StringEncoding或NSUnicodeStringEncoding的文件如下:

NSStringEncoding encoding = NSUnicodeStringEncoding; 
NSString *xmlFeedStr = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"download.rss" withExtension:@"webintents"] encoding:encoding error:&error]; 

但沒有成功。我遇到了一些可可錯誤,因爲無法加載文件或加載沒有內容的文件。

請幫幫我嗎?

我把我的檔案在:

http://www.mediafire.com/download.php?yxfp3ch8n3ai4iq

回答

0

的問題,代碼中 「內容:編碼」。請使用下面的代碼:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSLog(@"Application Did Finish Launching"); 

    NSString *dataString = [[[NSString alloc] initWithContentsOfFile:@"/Users/alex/Downloads/download.rss.webintents" encoding:NSASCIIStringEncoding error:nil] autorelease]; 

    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; 
    [parser setDelegate:self]; 
    [parser parse]; 
    [parser release]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    NSLog(@"Did Start Element: %@", elementName); 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    NSLog(@"Found Characters: %@", string); 
} 

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock 
{ 
    NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; 
    NSLog(@"Found CDATA: %@", someString); 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    NSLog(@"Did End Element: %@", elementName); 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{ 
    NSLog(@"Parser Did End Document"); 
} 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError 
{ 
    NSLog(@"Parse Error Occurred: %@", parseError.description); 
} 
+0

我試過了,它工作。但是,您能解釋一下您的解決方案中的原因或任何建議嗎?您使用2種不同的編碼。所以我可以確保它在稍後的情況下工作。因爲這個XML文件每天都在更新。我只是在某些日子遇到,有些日子沒有。謝謝 –