Как преобразовать разметку NSString HTML в обычный текст NSString? - PullRequest
12 голосов
/ 09 апреля 2010

В сети искал пример того, как преобразовать разметку HTML-строки в обычный текст.

Я получаю информацию из канала, который содержит HTML, затем я отображаю эту информацию в текстовом представлении. UITextView имеет свойство для преобразования HTML или я должен сделать это в коде. Я попробовал:

NSString *str = [NSString stringWithCString:self.fullText encoding:NSUTF8StringEndcoding];

но, похоже, не работает. У кого-нибудь есть идеи?

Ответы [ 4 ]

33 голосов
/ 09 апреля 2010

Вы можете сделать это, анализируя HTML, используя класс NSScanner

- (NSString *)flattenHTML:(NSString *)html {

    NSScanner *theScanner;
    NSString *text = nil;
    theScanner = [NSScanner scannerWithString:html];

    while ([theScanner isAtEnd] == NO) {

        [theScanner scanUpToString:@"<" intoString:NULL] ; 

        [theScanner scanUpToString:@">" intoString:&text] ;

        html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@""];
    }
    //
    html = [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    return html;
}

Надеюсь, это поможет.

8 голосов
/ 08 июня 2012

Если вы используете UIWebView, тогда будет проще разобрать HTML в текст:

fullArticle = [webView stringByEvaluatingJavaScriptFromString:@"document.body.getElementsByTagName('article')[0].innerText;"]; // extract the contents by tag

fullArticle = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerText"]; // extract text inside body part of HTML
0 голосов
/ 09 апреля 2010

Если вам нужно представить текст только для чтения, почему бы не использовать UIWebView?

0 голосов
/ 09 апреля 2010

вы не можете сделать это напрямую, я думаю ... однако вы можете использовать NSXML Parser и анализировать HTML и получать именно то, что вы хотите ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...