我正在尝试解析特定问题的Stack Overflow RSS提要: https://stackoverflow.com/feeds/question/2110875
为此我正在使用TouchXML库。以下代码中似乎存在问题:
CXMLDocument *parser = [[CXMLDocument alloc] initWithData:sourceData options:0 error:nil];
NSArray *allEntries = [parser nodesForXPath:@"//entry" error:nil];
NSLog(@"Found entries: %d",[allEntries count]); //Returns 0
NSLog语句应返回Feed中所有条目的计数。在这种情况下它应该是'3',问题是它返回0。
我发现这段代码确实有效:
CXMLDocument *preParser = [[CXMLDocument alloc] initWithData:sourceData options:0 error:nil];
NSString *sourceStringUTF8 = [preParser XMLString];
[preParser release];
CXMLDocument *parser = [[CXMLDocument alloc] initWithData:[sourceStringUTF8 dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSArray *allEntries = [parser nodesForXPath:@"//entry" error:nil];
NSLog(@"Found entries: %d",[allEntries count]); //Returns 3, which is ok
但是使用它似乎很麻烦(可能是这样)并引入了一些其他的零星错误。
据我所知,Xpath表达式是正确的。我也使用this页面进行了检查。
任何人都可以帮我解决这个问题,或者指出我正确的方向。
感谢。
答案 0 :(得分:2)
我有一个非常类似的问题。这与xml命名空间有关,TouchXML不能很好地支持(已知问题)。
我相信在你的hack中,命名空间没有被传递到第二个解析器,这就是它工作的原因。
更简单的方法就是改变
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
简单地替换为
<html>
和xPath现在有效。
答案 1 :(得分:0)
也许首先使用error
nodesForXPath:error
参数来查看它是否返回错误?在拨打电话后检查allEntries
是否不是nil
?