3

特定の質問のStackOverflowRSSフィードを解析しようとしています: 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

しかし、これを使用すると(おそらくそうですが)ハッキーに見え、他のいくつかの散発的なバグが発生します。

私の知る限り、Xpath式は正しいです。このページでも確認しました。

誰かがこの問題で私を助けてくれますか、または私を正しい方向に向けることができますか?

ありがとう。

4

2 に答える 2

2

私は非常によく似た問題を抱えていました。これは、TouchXMLがあまりサポートしていないxml名前空間と関係があります(既知の問題)。

あなたのハックでは、名前空間が2番目のパーサーに渡されなかったと思います。それが、それが機能する理由です。

より簡単な方法は、変更することです

<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 に答える