3

我正在尝试解析特定问题的 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 语句应该返回提要中所有条目的计数。在这种情况下,它应该是 '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

但是使用它似乎很hacky(它可能是)并引入了其他一些零星的错误。

据我所知,Xpath 表达式是正确的。我也使用页面进行了检查。

谁能帮我解决这个问题,或者指出我正确的方向。

谢谢。

4

2 回答 2

2

我有一个非常相似的问题。这与 xml 命名空间有关,TouchXML 不太支持该命名空间(一个已知问题)。

我相信在您的破解中,名称空间没有传递到第二个解析器中,这就是它起作用的原因。

更简单的方法就是改变

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

简单地替换为

<html>

xPath 现在可以工作了。

于 2010-02-05T19:02:28.570 回答
0

也许首先实际使用该error参数来nodesForXPath:error查看它是否返回错误?并在拨打电话后检查是否allEntries不是?nil

于 2010-02-03T18:31:59.613 回答