2012-05-08 3 views
1

Привет, у меня есть вопрос для синтаксического анализа RSS.Как удалить тег HTML внутри тега XML после разбора RSS?

В настоящее время я могу разобрать RSS XML на новостной ленте и отобразить его в UITableViewCell. Я разбираю описание, которое является следующим:

<description><![CDATA[ <a href="http://vnexpress.net/gl/xa-hoi/2012/05/thuy-dien-song-tranh-de-bi-lo-sut-dat-1/"><img src="http://vnexpress.net/Files/Subject/3b/bd/66/e0/sat-lo-dat-Song-Tranh-2.jpg"></a>this is new<BR />></description> 

Проблема теперь, когда я могу как-то вытащить текст внутри этого тега? В настоящее время это отобразить все внутри описания тега, который:

<![CDATA[ <a href="http://vnexpress.net/gl/xa-hoi/2012/05/thuy-dien-song-tranh-de-bi-lo-sut-dat-1/"><img src="http://vnexpress.net/Files/Subject/3b/bd/66/e0/sat-lo-dat-Song-Tranh-2.jpg"></a>this is new<BR />> 

Я просто хочу простой текст, который будет отображаться:

this is new 

И я также хочу получить изображение в этом теге описания, так что я могу показать его:

<img src="http://vnexpress.net/Files/Subject/3b/bd/66/e0/sat-lo-dat-Song-Tranh-2.jpg"> 

. Скажите, пожалуйста, как? Заранее спасибо.

ответ

1

Я должен был сделать это раньше , поэтому я вставлю код, который я использовал здесь.

- (NSString *)removeHTMLTags:(NSString *)str 
{ 
NSMutableString *temp_str = [[NSMutableString alloc] initWithString:str]; 
NSRange openTag = [temp_str rangeOfString:@"<"]; 
NSRange closeTag = [temp_str rangeOfString:@">"]; 

while (openTag.length > 0) { 
    NSRange range; 
    range.location = openTag.location; 
    range.length = (closeTag.location - openTag.location) + 1; 
    [temp_str setString:[temp_str stringByReplacingCharactersInRange:range withString:@""]]; 

    openTag = [temp_str rangeOfString:@"<"]; 
    closeTag = [temp_str rangeOfString:@">"]; 
} 

[temp_str replaceOccurrencesOfString:@"&Auml;" withString:@"Ä" options:NSLiteralSearch range:NSMakeRange(0, [temp_str length])]; 
[temp_str replaceOccurrencesOfString:@"&Aring;" withString:@"Å" options:NSLiteralSearch range:NSMakeRange(0, [temp_str length])]; 
[temp_str replaceOccurrencesOfString:@"&AElig;" withString:@"Æ" options:NSLiteralSearch range:NSMakeRange(0, [temp_str length])]; 


while ([temp_str rangeOfString:@" "].location != NSNotFound) { 
    [temp_str replaceOccurrencesOfString:@" " withString:@" " options:NSLiteralSearch range:NSMakeRange(0, [temp_str length])]; 
} 

while ([temp_str rangeOfString:@" ."].location != NSNotFound) { 
    [temp_str replaceOccurrencesOfString:@" ." withString:@"." options:NSLiteralSearch range:NSMakeRange(0, [temp_str length])]; 
} 

while ([temp_str rangeOfString:@" ,"].location != NSNotFound) { 
    [temp_str replaceOccurrencesOfString:@" ," withString:@"," options:NSLiteralSearch range:NSMakeRange(0, [temp_str length])]; 
} 

while ([temp_str rangeOfString:@" ;"].location != NSNotFound) { 
    [temp_str replaceOccurrencesOfString:@" ;" withString:@";" options:NSLiteralSearch range:NSMakeRange(0, [temp_str length])]; 
} 


return temp_str; 
} 
+0

Благодарим за ответ, кстати, знаете ли вы, как получить изображение из HTML-тега, например: user1035877

-1

Для прошивки 7+ можно использовать NSAttributedString следующим образом:

[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:nil]; 

для более низкого, чем IOS 7 использовать этот код, который удаляет все между < и>

(NSString *) stringByStrippingHTML { 
    NSRange r; 
    NSString *s = [[self copy] autorelease]; 
    while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound) 
    s = [s stringByReplacingCharactersInRange:r withString:@""]; 
    return s; 
} 
Смежные вопросы