iphone - 如何在保持段落格式的同时将 HTML 解析为纯文本

标签 iphone ios html-parsing libxml2 nsscanner

我有一个从 Restful 网络服务中提取数据的 iOS 应用程序。我收到的部分内容正在加载到 UITextView 中.将进入 TextView 的部分以 HTML 格式出现。我需要将其从 HTML 转换为纯文本,同时使用段落标记正确设置 TextView 的格式。

这是 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从这个例子中,How to convert NSString HTML markup to plain text NSString? .这实现起来很快,但它会去除所有标签并将文本解析为一个长段落。

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

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

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

解决方案

根据 lxt 的建议,我调查了 DTCoreText .一旦我设法将它安装在我的应用程序中(为此绝对推荐 cocoa pod )。这很容易 #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线。第二次构建成功,细节 View 被完美格式化。这是一个拳头泵的时刻!再次感谢lxt的推荐!

最佳答案

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

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

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

关于iphone - 如何在保持段落格式的同时将 HTML 解析为纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17497969/

相关文章:

iphone - iOS 4.0 中的多任务处理对开发人员有何影响?

ios - 如何在 UIImageView 上创建从一个图像到另一个图像的淡入淡出效果?

iphone - 在 Objective-C (iPhone) 中使用 SVC 网络服务

javascript - Gmail : What is a jQuery selector for incoming mail senders only? 通常如何使用高度压缩和嵌套的 CSS?

iphone - 在 UITabBar 中添加一个按钮来触发弹出窗口

iphone - 如何在单击时从通知列表中清除单个通知?

c - 将简单的 HTML 解析成树

python - 如何使用 BeautifulSoup 获取 <hr class = 'calibre2' > ... <hr class ="calibre2"/> 之间的内容

iphone - iPhone 原生应用的测试驱动设计

ios - UITableView 不使用 UISearchBar 滚动