【问题标题】:How to parse HTML to PlainText while maintaining paragraph formatting如何在保持段落格式的同时将 HTML 解析为纯文本
【发布时间】:2013-07-04 02:14:10
【问题描述】:

我有一个从 Restful Web 服务中提取数据的 iOS 应用。我收到的部分内容正在加载到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>

可以看到&lt;p data-seq="2"&gt;&lt;span class="paragraph"&gt;....&lt;/span&gt;&lt;/p&gt;指定了段落的开头和结尾。

我最初尝试使用此示例中的NSScanner How to convert NSString HTML markup to plain text NSString?。这实现起来很快,但它会去除所有标签并将文本解析为一个长段落。

我已将libXml2 添加到我的代码中。我开始关注这个tutorial 进行实施,但是在我开始研究它之后,我不确定如何将输出格式化为段落。

我也看到了DTCoreText library 的推荐,但我没有看到很多关于它的信息。

有人可能会使用上述三个选项中的任何一个或他们自己的一个选项就如何在保留段落的同时将 html 解析为纯文本提出一个 sn-p 吗?

解决方案

根据 lxt 的建议,我调查了 DTCoreText。一旦我设法将它安装在我的应用程序中(绝对推荐可可豆荚)。在我的detailViewController 中就像#import "DTCoreText.h" 一样简单,然后将下面的行添加到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的推荐!

【问题讨论】:

    标签: iphone ios html-parsing libxml2 nsscanner


    【解决方案1】:

    我真诚地建议使用DTCoreText 而不是编写自己的解析器。重新发明轮子并没有真正的好处,而且它也是一个广泛使用的库,拥有庞大的用户群。

    我很惊讶你找不到关于它的信息,图书馆has very good documentation available,作者在 Twitter 上也很活跃 (@cocoanetics)。

    您可以使用提供的漂亮的DTAttributedTextView 类来代替您的UITextView。该库还提供了一个使用initWithHTMLData:documentAttributes: 方法扩展NSAttributedString 的类别。这将允许您创建属性字符串并将其插入您的视图。真的不超过几行代码。

    【讨论】:

    • lxt,感谢您的回复。我应该说“我没有研究太多关于 DTCoreText 解析器的信息。我在 github 上看了一眼,看到了一个关于 NSAttributedString 的 sn-p。我会阅读文档和你推荐的方法如果我能弄清楚如何让它发挥作用。
    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2019-12-04
    • 2014-09-10
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多