2010-02-03 44 views
3

我試圖解析一個具體問題的堆棧溢出RSS提要: https://stackoverflow.com/feeds/question/2110875解析使用TouchXML SO RSS提要,沒有<entry>標籤發現

對於這個我使用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頁面進行了檢查。

任何人都可以幫助我解決這個問題,或者指出我在正確的方向。

謝謝。

回答

2

我有一個非常類似的問題。這與xml命名空間有關,TouchXML不支持很好的(已知問題)。

我相信在你的黑客中,命名空間並沒有傳遞到第二個解析器,這就是它的工作原理。

一個更簡單的方法就是改變

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

換成簡單

<html> 

和XPath現在的作品。

0

也許從實際使用error參數到nodesForXPath:error來查看它是否返回錯誤?並在撥打電話後檢查allEntries是不是nil

+0

我記錄了一條錯誤消息,它是空的,所以沒有錯誤。問題在於TouchXML根本不會爲Xpath語句返回任何節點,而AFAIK只需找到它們即可。 – Rengers 2010-02-03 18:34:01