2012-10-17 76 views
1

我想從web page中提取正文段落並將它們存儲到字符串中。我是以最好的方式解析html源代碼嗎?

首先,我獲得使用

NSString *sourceCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:currentLink] encoding:NSUTF8StringEncoding error:&error]; 

主體段中的整個源代碼<!-- (START) Pagination Content Wrapper -->後開始,並結束之前<!-- (END) Pagination Content Wrapper -->

所以打算分割字符串像這樣

NSString *startingPt = @"<!-- (START) Pagination Content Wrapper -->"; 
NSString *endingPt = @"<!-- (END) Pagination Content Wrapper -->"; 

NSString *sub = [sourceCode substringFromIndex:NSMaxRange([str rangeOfString:startingPt])]; 
sub = [sourceCode substringToIndex:[s rangeOfString:endingPt].location; 

然後,我會使用stringByReplacingOccurrencesOfString:withString:來替換剩餘的html標記@""

有沒有更好的方法來實現我的目標?

回答

0

在刪除它們之前,您必須先找到HTML標記。除非您知道這個系統需要使用的標籤數量有限,否則您不應該在代碼中對其進行硬編碼。使用-stringByReplacingOccurrences ...,您需要一個確切的字符串,以及所有參數ID和類標籤等,這使得它更容易更改。

除非你要使用第三方擴展的vishy,它看起來像它你需要什麼建議,你將不得不做這樣的事情:

1)找到第一在字符串中出現「<」

2)查看「<」是否已轉義。

3)如果沒有,找到下一個「>」。

4)看看是否逃脫。 5)如果不是,爲標籤創建一個NSRange(從「<」到「>」),並使用-stringByReplacingCharactersInRange來擺脫它。

6)重複,直到你沒有找到更多未轉義的「<」。

這會給你留下去除HTML的文本,但不是純文本。您仍然會看到HTML轉義,同樣重要的是,不能保證在刪除HTML後,空格(在HTML中被忽略)將具有任何意義。

+0

正如你所提到的,存在隨機數量的空白。有沒有辦法擺脫他們? – Mahir

+0

使用[myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; – chapka

+0

我已經添加了。它只是在文本開始之前和之後擺脫空格,而不是段落之間的空格 – Mahir

0

獲得子串刪除START &結束後,你可以簡單地使用NSString+HTML categories逃脫的HTML標記,它是一個很好的類別來實現HTML編碼,解碼和多,主要是它,你可以使用你的NSString實例不需要爲此目的創建單獨的對象。

Objective C HTML escape/unescape在這裏您可以找到更多關於它的討論。

這些是可用的方法,建議在後&我喜歡它。

- (NSString *)stringByConvertingHTMLToPlainText; 
- (NSString *)stringByDecodingHTMLEntities; 
- (NSString *)stringByEncodingHTMLEntities; 
- (NSString *)stringWithNewLinesAsBRs; 
- (NSString *)stringByRemovingNewLinesAndWhitespace;