我在解析(显然)正确的XML代码时遇到了奇怪的问题!
解析的xml是:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<results>
<file id="0" name=" Linux Ubuntu.rar 700.64 2" size="700" disp="2"/>
<file id="1" name=" [Soft] Sistema operativo Linux. Live CD Distro Ubuntu-5.04-live-i386.iso 624.926 4" size="5" disp="4"/>
<file id="2" name=" ubuntu-9.04-server-i386.iso 577.220 2" size="9" disp="2"/>
<file id="3" name=" virtualbox-3.1_3.1.2-56127_Ubuntu_karmic_amd64.deb 43.578 1" size="3" disp="1"/>
<file id="4" name=" [APP-ITA].UBUNTU.LINUX.iso 586.822 2" size="586" disp="2"/>
<file id="5" name=" Ubuntu linux 2007.iso 700.446 1" size="700" disp="1"/>
<file id="6" name=" Installare aMule Adunanza + Liste Server + Liste Nodi su Ubuntu Gutsy [Fastweb 0.72 5" size="0" disp="5"/>
<file id="7" name=" - Guida Per Linux Ubuntu 7.03 Facile Da Usare!!!!!!!La Prima In Ita.rar 731.351 3" size="7" disp="3"/>
<file id="8" name=" Ubuntu Hacks - Tips and Tools for Exploring, Using, and Tuning Linux (O'Reilly, 3.494 1" size="3" disp="1"/>
<file id="9" name=" Linux-ubuntu-8.04.1-desktop-i386.iso 694.498 3" size="8" disp="3"/>
<file id="10" name=" [MANUALE] Ubuntu Linux - Computer Magazine.pdf 86.992 2" size="86" disp="2"/>
<file id="11" name=" (Ebook - Ita - Software) Ubuntu - Desktop Guide.pdf 0.686 3" size="0" disp="3"/>
<file id="12" name=" Installare Amule Adunanza In Ubuntu.rar 0.25 6" size="0" disp="6"/>
<file id="13" name=" UBUNTU LINUX [ITA].PDF 0.536 62" size="0" disp="62"/>
<file id="14" name=" Comandi Fondamentali Ubuntu.rtf 0.67 4" size="0" disp="4"/>
<file id="15" name=" ubuntu Guida.tar 0.160 1" size="0" disp="1"/>
<file id="16" name=" ubuntu-remix-italiano-8.10.iso 702.720 1" size="8" disp="1"/>
</results>
</root>
NSXMLParser给出了以下错误:
2010-01-13 20:23:22.500 iMule[1419:20b] Error 65, Description: (null), Line: 13, Column: 24
2010-01-13 20:23:22.516 iMule[1419:20b] Error 4, Description: (null), Line: 1, Column: 1
有趣的是,如果我单独解析这些行,我没有任何问题,解析器总是大惊小怪!
我的解析代码是:
// DELEGATE XML PARSER
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
if([elementName isEqualToString:@"downloads"] || [elementName isEqualToString:@"results"]){
NSLog(@"starting or downloads or results");
if(xmlArray){
xmlArray= nil;
}
self.xmlArray= [[NSMutableArray alloc] init];
if([elementName isEqualToString:@"results"]){
[self.results_controller.activity startAnimating];
}
if([elementName isEqualToString:@"downloads"]){
[self.downloads_Controller.activity startAnimating];
}
}
else if([elementName isEqualToString:@"file"]){
NSLog(@"found file...");
[self.xmlArray addObject:attributeDict];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog(elementName);
if([elementName isEqualToString:@"downloads"] || [elementName isEqualToString:@"results"]){
if([elementName isEqualToString:@"downloads"]){
NSLog(@"downloads found... reloading table");
self.downloads_Controller.downloads= xmlArray;
[self.downloads_Controller.tableView reloadData];
[self.downloads_Controller.activity stopAnimating];
}
else if([elementName isEqualToString:@"results"]){
NSLog(@"results found... reloading table");
self.results_controller.results= xmlArray;
// NSLog(@"xmlarray: %@ and results: %@", xmlArray, self.results_controller.results);
[self.results_controller.tableView reloadData];
[self.results_controller.activity stopAnimating];
}
}
else if([elementName isEqualToString:@"error"]){
UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"Error" message:@"aMule dosent seem to be on" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
NSLog(@"Error %i, Description: %@, Line: %i, Column: %i", [parseError code],
[[parser parserError] localizedDescription], [parser lineNumber],
[parser columnNumber]);
}
- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validError{
NSLog(@"valid: %@", validError);
}
// END DELEGATES XML PARSER
有人知道它可能是什么吗?
由于
答案 0 :(得分:1)
当你说“单独解析这些行”时,你的意思是你只用一个“文件”条目递给了一个完整的XML文档吗?如果是这种情况,那么另一种方法是设置带有两个“文件”条目的XML文档,一个文件0和文件1,一个文件1和文件2,一个文件2和文件3等,以及看看所有对是否正常工作。根据您将XML传递到解析器的方式,您可能会遇到仅在解析连续文件条目时出现的问题。
根据您的解析代码的长度,将它添加到原始帖子会很有帮助。
这个简短的程序使用NSXMLParser解析您提供的数据:
#import <Foundation/Foundation.h>
int
main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData *xml = [NSData dataWithContentsOfFile: @"data.xml"];
NSLog(@"xml: %@", [[NSString alloc] initWithData: xml encoding: NSASCIIStringEncoding]);
NSXMLParser *parser = [[NSXMLParser alloc] initWithData: xml];
if (!parser)
NSLog(@"Unable to initialize parser");
else if ([parser parse])
NSLog(@"Parsed successfully");
else
NSLog(@"Parsing failed: %@", [[parser parserError] localizedDescription]);
[pool release];
return 0;
}
答案 1 :(得分:1)
您是否查找了错误代码?
看起来XML解析器认为在第13行的第24列需要一些空格。
您可以在pastebin上发布XML数据,以便我们查看原始数据吗?我怀疑你或Stack Overflow以某种方式改变了数据(可能是出于格式化的原因),并且从NSXMLParser报告的内容中删除了行/列号。