2013-07-05 22 views
2

我有一个从Restful Web服务中提取数据的iOS应用程序。我收到的部分内容正在加载到UITextView。将进入文本视图的部分以HTML格式进入。我需要将它从HTML转换为纯文本,同时使用段落标签来正确地格式化文本视图。如何在保持段落格式的同时将HTML解析为PlainText

这里是什么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>指定段落的开始和结束。

我最初尝试使用此示例中的NSScannerHow to convert NSString HTML markup to plain text NSString?。这很快就实现了,但它将所有标签剥离并将文本解析为一个长段落。

我已将libXml2添加到我的代码中。我开始遵循这个tutorial的实现,但在我开始工作之后,我不确定如何将输出格式化为段落。

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

有人可能会抛出一个片段使用任何上述三个选项或自己的一个关于如何解析HTML到纯文本,同时保持段落?

SOLUTION

每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!

回答

1

我会诚实地推荐使用DTCoreText而不是编写自己的解析器。重塑车轮并没有真正的好处,它也是一个广泛使用的库,拥有庞大的用户群。

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

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

+0

lxt,谢谢你的回复。我应该说:“我没有学习关于'DTCoreText'解析器的更多信息,我在github上看了一遍,看到了一个关于'NSAttributedString'的片段,我将阅读文档和你推荐的方法,看看我是否可以弄清楚如何使它工作。 – Ben

相关问题