菜鸟教程小白 发表于 2022-12-12 12:17:19

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


                                            <p><p>我有一个从 Restful Web 服务中提取数据的 iOS 应用。我收到的部分内容正在加载到 <code>UITextView</code> 中。将进入 TextView 的部分以 HTML 格式出现。我需要将它从 HTML 转换为纯文本,同时使用段落标签来正确格式化 TextView 。</p>

<p>这是 HTML 格式的样子</p>

<pre><code>&lt;p data-seq=&#34;1&#34;&gt;&lt;span class=&#34;paragraph&#34;&gt;Content of paragraph 1&lt;/span&gt;&lt;/p&gt;&lt;p data-seq=&#34;2&#34;&gt;&lt;span class=&#34;paragraph&#34;&gt;Content of paragraph 2&lt;/span&gt;&lt;/p&gt;
</code></pre>

<p>可以看到 <code><p data-seq="2"><span class="paragraph">....</span></p></code> 指定了开始和结束段落。</p>

<p>我最初尝试使用此示例中的 <code>NSScanner</code>,<a href="https://stackoverflow.com/questions/2606134/iphone-xcode-how-to-convert-nsstring-html-markup-to-plain-text-nsstring" rel="noreferrer noopener nofollow">How to convert NSString HTML markup to plain text NSString?</a> .这实现起来很快,但它会去除所有标签并将文本解析为一个长段落。 </p>

<p>我已将 <code>libXml2</code> 添加到我的代码中。我开始关注这个 <a href="http://www.raywenderlich.com/14172/how-to-parse-html-on-ios" rel="noreferrer noopener nofollow">tutorial</a>用于实现,但在我开始研究它之后,我不确定如何将输出格式化为段落。</p>

<p>我还看到了关于 <a href="https://github.com/Cocoanetics/DTCoreText" rel="noreferrer noopener nofollow">DTCoreText library</a> 的建议。但我没有看到很多关于它的信息。</p>

<p>有人可能会使用上述三个选项中的任何一个或他们自己的一个选项来抛出一个片段,说明如何在保留段落的同时将 html 解析为纯文本?</p>

<p><strong><em>解决方案</em></strong></p>

<p>根据 lxt 的建议,我调查了 <code>DTCoreText</code>。一旦我设法将它安装在我的应用程序中(绝对推荐 cocoapod )。在我的 <code>detailViewController</code> 中使用 <code>#import "DTCoreText.h"</code> 很简单,然后将下面的行添加到 <code>UITextView</code> 中。</p >

<pre><code>    NSDictionary *options = @{DTUseiOS6Attributes: };
    NSData *htmlData = ;
    NSAttributedString *stringArticle = [ initWithHTMLData:htmlData options:options documentAttributes:NULL];
    self.newsDetailText.attributedText = stringArticle;
</code></pre>

<p>第一次构建失败,因为我没有包含 <code>DTUseiOS6Attributes</code> 行。第二次构建成功,详细 View 的格式完美。这是一个拳头时刻!再次感谢lxt的推荐!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我真诚地建议使用 <code>DTCoreText</code> 而不是编写自己的解析器。重新发明轮子并没有真正的好处,而且它也是一个广泛使用的库,拥有庞大的用户群。</p>

<p>我很惊讶你找不到关于它的信息,图书馆 <a href="https://docs.cocoanetics.com/DTCoreText/" rel="noreferrer noopener nofollow">has very good documentation available</a> ,并且作者在 Twitter 上也非常活跃 (<a href="https://twitter.com/Cocoanetics" rel="noreferrer noopener nofollow">@cocoanetics</a>)。</p>

<p>您可以使用提供的漂亮的 <code>DTAttributedTextView</code> 类来代替您的 <code>UITextView</code>。该库还提供了一个使用 <code>initWithHTMLData:documentAttributes:</code> 方法扩展 <code>NSAttributedString</code> 的类别。这将让您创建属性字符串并将其插入您的 View 。真的不超过几行代码。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 如何在保持段落格式的同时将 HTML 解析为纯文本,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17497969/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17497969/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 如何在保持段落格式的同时将 HTML 解析为纯文本