Как разобрать 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:
метод. Это позволит вам создать атрибутивную строку и подключить ее к вашему представлению. Это действительно не более пары строк кода.