Как разобрать HTML в PlainText при сохранении форматирования абзаца

У меня есть приложение для iOS, которое извлекает данные из веб-службы Restful. Часть содержимого, которое я получаю, загружается в UITextView, Часть, которая будет входить в текстовое представление, будет представлена ​​в формате HTML. Мне нужно преобразовать его из HTML в обычный текст, используя теги абзаца для правильного форматирования текста.

Вот как выглядит формат HTML

<p data-seq="1"><span class="paragraph">Content of paragraph 1</span></p><p data-seq="2"><span class="paragraph">Content of paragraph 2</span></p>

Ты это видишь <p data-seq="2"><span class="paragraph">....</span></p> обозначает начало и конец абзаца.

Я изначально пытался использовать NSScanner из этого примера, Как преобразовать разметку NSString HTML в обычный текст NSString?, Это было быстро реализовано, но оно удаляет все теги и разбирает текст как один длинный абзац.

я добавил libXml2 к моему коду. Я начал следовать этому руководству для реализации, но после того, как я начал работать с ним, я не был уверен, как отформатировать вывод в абзацы.

Я также видел рекомендации для библиотеки DTCoreText, но я не видел много информации об этом.

Может ли кто-нибудь выкинуть фрагмент, используя любой из трех приведенных выше вариантов или один из них, о том, как разобрать html в обычный текст, сохраняя при этом абзацы?

РЕШЕНИЕ

По рекомендации lxt, которую я исследовал DTCoreText, Как только мне удалось установить его в моем приложении (определенно рекомендую какао для этого). Это было легко, как #import "DTCoreText.h" в моем detailViewController а затем строки ниже, чтобы добавить его к UITextView,

    NSDictionary *options = @{DTUseiOS6Attributes: [NSNumber numberWithBool:YES]};
    NSData *htmlData = [self.htmlString dataUsingEncoding:NSUTF8StringEncoding];
    NSAttributedString *stringArticle = [[NSAttributedString alloc] initWithHTMLData:htmlData options:options documentAttributes:NULL];
    self.newsDetailText.attributedText = stringArticle;

Первая сборка не удалась, потому что я не включил DTUseiOS6Attributes линия. Вторая сборка прошла успешно, и детальный вид был отлично отформатирован. Это был первый момент! Еще раз спасибо за рекомендацию lxt!

1 ответ

Решение

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

Я удивлен, что у вас возникли проблемы с поиском информации об этом, в библиотеке имеется очень хорошая документация, и автор также довольно активен в Twitter ( @cocoanetics).

Вы можете использовать отличный DTAttributedTextView класс предоставляется вместо вашего UITextView, Библиотека также предоставляет категорию, которая расширяет NSAttributedString с initWithHTMLData:documentAttributes: метод. Это позволит вам создать атрибутивную строку и подключить ее к вашему представлению. Это действительно не более пары строк кода.

Другие вопросы по тегам