2

我有一个从 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>

您可以看到<p data-seq="2"><span class="paragraph">....</span></p>指定段落的开头和结尾。

我最初尝试使用NSScanner此示例中的如何将 NSString HTML 标记转换为纯文本 NSString?. 这实现起来很快,但它会去除所有标签并将文本解析为一个长段落。

我已添加libXml2到我的代码中。我开始按照本教程进行实施,但是在开始完成之后,我不确定如何将输出格式化为段落。

我还看到了对DTCoreText 库的建议,但我没有看到很多关于它的信息。

有人可能会使用上述三个选项中的任何一个或他们自己的一个选项来抛出一个关于如何在维护段落的同时将 html 解析为纯文本的片段吗?

解决方案

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

4

1 回答 1

1

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

我很惊讶您找不到有关它的信息,该库提供了非常好的文档,并且作者在 Twitter 上也非常活跃(@cocoanetics)。

您可以使用DTAttributedTextView提供的漂亮类代替您的UITextView. 该库还提供了一个使用方法扩展的NSAttributedString类别initWithHTMLData:documentAttributes:。这将让您创建属性字符串并将其插入您的视图。它实际上只不过是几行代码。

于 2013-07-05T23:22:39.010 回答