2016-01-10 13 views
0

我想寫一個非常簡單的iOS應用程序,將解析一個網頁(http://arxiv.org/list/cond-mat/recent)並顯示它的簡化版本。我選擇使用TFHpple來解析這個頁面。我想獲得論文的標題並將其顯示在TableViewController中。紙描述的HTML容器看起來像:解析一個網頁與TFHpple

<div class="list-title"> 
<span class="descriptor">Title:</span> Encoding Complexity within Supramolecular Analogues of Frustrated Magnets 
</div> 

功能,我用它來解析和獲取值如下(感謝raywenderlich.com):

- (void) loadPapers{ 
    NSURL *papersURL = [NSURL URLWithString:@"http://www.arxiv.org/list/cond-mat/recent"]; 
    NSData *papersHTMLData = [NSData dataWithContentsOfURL:papersURL]; 

    TFHpple *papersParser = [TFHpple hppleWithHTMLData:papersHTMLData]; 

    NSString *papersXpathQueryString = @"//div[@class='list-title']"; 
    NSArray *papersNodes = [papersParser searchWithXPathQuery:papersXpathQueryString]; 

    NSMutableArray *newPapers = [[NSMutableArray alloc] initWithCapacity:0]; 

    for (TFHppleElement *element in papersNodes){ 
     Paper *paper = [[Paper alloc] init]; 
     [newPapers addObject:paper]; 

     paper.title = [[element firstChild] content]; 
    } 

    _objects = newPapers; 
    [self.tableView reloadData]; 

} 

這個功能應該解析整個HTML頁面並將數據返回到TableView。但是,當我嘗試它將空對象返回到paperNodes數組。基本上,元素的數量是正確的(〜25),但它們都是空的,我不知道爲什麼。

任何幫助,非常感謝!謝謝!

+0

如果你沒有綁定到tfhpple,你可以試試[HTMLKit](https://github.com/iabudiab/HTMLKit)。讓我知道你是否需要幫助。 – iska

+0

是的,我沒有綁定tfhpple,我只需要訪問div中的文本,然後將這些數據傳入某個容器,稍後再顯示它。你能給你一些有用的鏈接,你可以找到很好的關於HTMLKit的知識嗎? –

回答

1

我已用HTMLKit重寫了您的代碼。它看起來像這樣:

NSURL *papersURL = [NSURL URLWithString:@"http://www.arxiv.org/list/cond-mat/recent"]; 
NSData *papersHTMLData = [NSData dataWithContentsOfURL:papersURL]; 
NSString *htmlString = [[NSString alloc] initWithData:papersHTMLData encoding:NSUTF8StringEncoding]; 

HTMLDocument *document = [HTMLDocument documentWithString:htmlString]; 

NSArray *divs = [document querySelectorAll:@"div[class='list-title']"]; 

for (HTMLElement *element in divs) { 
    NSLog(@"%@", element.textContent); 
} 

返回在評論你的問題:

可不可以給你找到好的學習HTMLKit一些有用的鏈接?

您可以在項目的GitHub頁面上查看示例。源代碼被記錄並使用它相對簡單。如果您擁有基本的HTML & CSS體驗,那麼使用HTMLKit將會非常簡單。不幸的是,還沒有其他資源可以學習它。

+0

絕對好用!感謝您的工具包, 問題解決! –

+0

不客氣!很高興能有所幫助:) – iska

+0

嗨@iska是當前版本的HTMLKit的功能嗎?我試圖使用它,但我不斷收到錯誤消息說,我把它添加到橋頭像'#import「HTMLKit/HTMLKit.h」'它說HTMLElement.h文件沒有找到... – ShP

0

可能是[element firstChild]返回nil。我建議您添加一些NSLog語句來跟蹤數據提取並幫助您查明錯誤。

+0

沒錯。基本上,這是我的問題。我想解析器不能正確解析html元素。所以,我不確定什麼是錯的,什麼是正確的查詢。謝謝 –

+0

您是否在應用程序之外的目標HTML頁面上測試了XPath表達式?換句話說:您是否驗證過XPath表達式是正確的? –

+0

是的,我只是做了,似乎你是對的,我得到了[element firstChild]調用的空對象。但仍然不知道爲什麼。也許標記混淆了我爲達到文本所做的查詢? –