0

我需要获取托管在 Web 上的 XML 文件的内容并对其进行解析。

我决定使用 TouchXML 进行解析过程。但是,我无法获取文件的内容,因为它是用 ISO-8859-9 编码的

XML 文件网址:http ://rss.haberler.com/mobil/sondakika2.asp?kategori=manset

我尝试了 2 种不同的方法。

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 变为空,并且错误描述说:

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 终止应用程序。

我该如何解决这个问题?

4

1 回答 1

1

从 TouchXMLCXMLDocument.m文件来看,这initWithData:看起来像

- (id)initWithData:(NSData *)inData options:(NSUInteger)inOptions error:(NSError **)outError
{
return [self initWithData:inData encoding:NSUTF8StringEncoding options:inOptions error:outError];    
}

您可以尝试做的是,在此文件中,替换NSUTF8StringEncodingNSASCIIStringEncoding或使用它使用的任何编码。那可能会解决它。

于 2013-05-05T23:17:17.977 回答