我需要获取托管在Web上的XML文件的内容,然后解析它。
我决定使用TouchXML进行解析过程。但是,我无法获取文件的内容,因为它是用ISO-8859-9
编码的XML文件网址:http://rss.haberler.com/mobil/sondakika2.asp?kategori=manset
我尝试了两种不同的方法。
1)将url的内容导入NSString:
NSString *url = @"http://rss.haberler.com/mobil/sondakika2.asp?kategori=manset";
NSError *error = nil;
NSStringEncoding encoding;
NSString *xmlString = [[NSString alloc] initWithContentsOfURL: [NSURL URLWithString:url] usedEncoding:&encoding error:&error];
xmlString变为null,错误描述如下:
The operation couldn’t be completed. (Cocoa error 261.)
我没有使用usedEncoding,而是尝试明确指定编码,从UTF-8到NSISOLatin1StringEncoding和NSISOLatin2StringEncoding(遗憾的是,我找不到NSISOLatin9StringEncoding)。
2)我还尝试将xml加载到NSData中。
NSError *error = nil;
NSData *XMLData = nil;
XMLData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:url] options:0 error:&error];
当我构造XML Parser时,特定字符是未知的,当我获得字符串值时,应用程序终止。
CXMLDocument *doc = [[CXMLDocument alloc] initWithData:XMLData options:0 error:nil];
NSArray *nodes = [doc nodesForXPath:@"//item" error:nil];
for (CXMLElement *node in nodes) {
for(int counter = 0; counter < [xmlElement childCount]; counter++) {
CXMLNode * child = [xmlElement childAtIndex:counter];
NSString *childName = child.name;
NSString * childValue = [child stringValue];
}
}
获取子语言的stringValue将使用SIGABRT终止应用程序。
我该如何解决问题?
答案 0 :(得分:1)
从TouchXML CXMLDocument.m
文件中,这是initWithData:
的样子
- (id)initWithData:(NSData *)inData options:(NSUInteger)inOptions error:(NSError **)outError
{
return [self initWithData:inData encoding:NSUTF8StringEncoding options:inOptions error:outError];
}
您可以尝试执行的操作是,在此文件中,将NSUTF8StringEncoding
替换为NSASCIIStringEncoding
或其使用的任何编码。这可能会解决它。