質問

特定の質問のスタックオーバーフロー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

しかし、これを使用すると(おそらくそうである)、他のいくつかの散発的なバグを紹介します。

私が知る限り、XPathの表現は正しいです。使用してチェックしました これ ページも。

誰もがこの問題で私を助けたり、正しい方向に私を向けたりできますか。

ありがとう。

役に立ちましたか?

解決

非常に似た問題がありました。これは、XMLネームスペースと関係があり、TouchXMLはあまりサポートされていません(既知の問題)。

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

より簡単な方法は、ただ変えることです

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

単純に置き換えられました

<html>

そして、Xpathは今機能しています。

他のヒント

たぶん実際にそれを使用することから始めます error への議論 nodesForXPath:error エラーが返されるかどうかを確認しますか?かどうかを確認してください allEntries ではありません nil その電話をかけた後?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top