将 HTML 项目符号转换为纯文本

Posted

技术标签:

【中文标题】将 HTML 项目符号转换为纯文本【英文标题】:Converting HTML Bullets to PlainText 【发布时间】:2011-09-08 03:02:03 【问题描述】:

我正在为 android 创建一个应用程序,它所做的一件事就是在服务器上获取现有的 html 并使用 TextView 将其显示给用户。大多数 Html 标签都很好(例如粗体),但使用 Html.fromHtml(txt)

我注意到BulletSpan 存在于 android 文档中。但是,如何正确使用它绝对没有解释。

BulletSpan 真的对我有帮助吗?我该如何使用它?

最后,如果它对我没有帮助,我该如何在 Java 中更改所有列表以在它们的前面加上星号(就像 markdown 一样)?

请不要回答使用 webview。

【问题讨论】:

【参考方案1】:

查看android.text.Html的源代码(可在here获得),看起来下面的标签是由fromHtml(String)转换的。

br, p, div, em, b, strong, cite, dfn, i, big, small, font, blockquote, tt, a, u, sup, sub, h1, h2, h3, h4, h5, h6 , 图像

其中一些标签具有可转换的附加属性。例如,字体颜色属性的以下值被转换。

水蓝色、黑色、蓝色、紫红色、绿色、灰色、青柠色、栗色、海军蓝、橄榄色、紫色、红色、银色、蓝绿色、白色、黄色

很遗憾,我没有找到记录此信息的位置。

要转换其他标签,例如 ul 和 li,您需要提供 Html.TagHandler 的适当实现,Google searching 出现 examples。

希望这是有关如何处理翻译的足够信息。是否使用BulletSpan,我无法提供任何建议,因为我不知道我曾经见过一个在行动中,而Google searching for android "BulletSpan example" 出现零匹配。在非公共类android.content.res.StringBlock 内部,BulletSpan 用于表示一个列表项。因此,它的用途看起来很有希望。

【讨论】:

【参考方案2】:

我一直在与 Html.fromHtml() 给你的有限控制作斗争,我最终放弃了。

在将 Html 提供给 Html.fromHtml() 之前,我已经在使用 HtmlCleaner 来清理 Html,并且我刚刚实现了到 Spanned 的直接转换。这样我就可以完全控制元素的呈现方式,尽管我确实从原始 Html 类中复制了很多内容。

HtmlCleaner 会将 Html 解析为 TagNode 对象树,我实现了 CleanHtmlParser.fromTageNode() 方法。在这里:

https://github.com/NightWhistler/PageTurner/blob/master/src/net/nightwhistler/pageturner/html/CleanHtmlParser.java

BulletSpan 给了我一些混合的结果,因为它在行的左侧呈现项目符号,然后缩进文本而不是缩进文本和项目符号。我只是将它们包裹在边距中,并在文本前面打印了一个 unicode 项目符号字符。

【讨论】:

您需要在 HTML 上使用 HtmlCleaner 吗? Html.fromHtml() 已经使用 TagSoup 来处理“脏”HTML,因此您的 HTML 似乎将被处理两次。 现在它演变成一个单独的项目,它是 Html.fromHtml() 的替代品:github.com/NightWhistler/HtmlSpanner 您的图书馆看起来不错。我迫不及待想使用它。

以上是关于将 HTML 项目符号转换为纯文本的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML 文本转换为纯文本? [复制]

将 HTML 代码转换为纯文本,格式可用于文本文件 [重复]

使用 MIME::Entity 将 HTML 电子邮件转换为纯文本

是否有将 HTML 转换为纯文本的功能?

jquery将HTML代码转换为纯文本[重复]

BigQuery / DataPrep:提取字数的有效方法;将 HTML 转换为纯文本