我正在分析一个特定问题的堆栈溢出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页检查过。
有人能帮我解决这个问题吗,或者帮我指出正确的方向。
谢谢。
最佳答案
我也有类似的问题。这与xml名称空间有关,touchxml不太支持这个名称空间(一个已知的问题)。
我相信在您的黑客中,名称空间没有传递到第二个解析器,这就是它工作的原因。
一个简单的方法就是改变
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
替换为简单
<html>
xpath现在可以工作了。