【问题标题】:Parsing SO RSS feed using TouchXML, no <entry> tags found使用 TouchXML 解析 SO RSS 提要,未找到 <entry> 标记
【发布时间】:2010-02-03 18:28:22
【问题描述】:

我正在尝试解析特定问题的 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 表达式是正确的。我也使用this 页面检查过它。

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

谢谢。

【问题讨论】:

    标签: iphone xml rss xml-parsing touchxml


    【解决方案1】:

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

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

    更简单的方法就是改变

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

    替换为简单的

    <html>
    

    xPath 现在可以工作了。

    【讨论】:

      【解决方案2】:

      也许从实际使用 nodesForXPath:errorerror 参数开始,看看它是否返回错误?并在拨打电话后检查allEntries 是否不是nil

      【讨论】:

      • 我记录了一条错误消息,它为空,所以没有错误。问题是 TouchXML 根本不为 Xpath 语句返回任何节点,而 AFAIK 它应该只是找到它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 2012-11-08
      相关资源
      最近更新 更多