c# - 如何将 HTML 解析为带有样式的文本
问题描述
我正在使用 Xamarin Android 构建一个应用程序,我想将 HTML 转换为普通格式,例如:
HTML 代码
<p><strong>Lorem ipsum</strong> is placeholder text <strong><em><span style="color:#ff0000">commonly</span></em></strong> used in the graphic, print, and publishing industries for previewing layouts and visual mockups.
</p>
<p> </p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
文本
Lorem ipsum是图形、印刷和出版行业中常用的占位符文本,用于预览布局和视觉模型。
- 项目 1
- 第 2 项
- 第 3 项
我从数据库中获取此内容,我想将帖子内容转换为带有格式的文本。
解决方案
TextView 目前支持本博文中列出的以下 HTML 标记:
<a href="...">
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div align="...">
<em>
<font size="..." color="..." face="...">
<h1>
<h2>
<h3>
<h4>
<h5>
<h6>
<i>
<img src="...">
<p>
<small>
<strike>
<strong>
<sub>
<sup>
<tt>
<u>
如果您只想在 TextView 中显示它,那么只需执行以下操作:
TextView txtView;
txtView.TextFormatted = Html.FromHtml(HTMLFromDataSource);
如果你想使用不同的控件,那么还有其他方法可以实现这一点,但 TextView 无论如何都支持 HTML,所以如果你可以使用它,我会的。
但是值得注意的是,目前看来不支持 UL 和 LI。所以你必须使用类似的东西Html.TagHandler
来告诉它做什么,这是一个Java实现:
public class UlTagHandler implements Html.TagHandler{
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if(tag.equals("ul") && !opening) output.append("\n");
if(tag.equals("li") && opening) output.append("\n\t•");
}
}
textView.setText(Html.fromHtml(myHtmlText, null, new UlTagHandler()));
您应该能够将其转换为 Xamarin 的 C#。
推荐阅读
- python - TypeError: __init__() 得到了一个意外的关键字参数“num_workers”
- javascript - JS:带有大型嵌套对象和表单数据的 axios POST
- reactjs - React Native 项目结构问题
- codenameone - 为什么 Display.getInstance().getProperty("pushType", "-1") 的值是“3”而不是“1”或“2”?
- c++ - 为什么我会收到警告:当指针具有正确的类型时,取消引用类型双关指针?
- python - Matplotlib Savefig 保存一个空白 png
- python - 如何更新现有的 Excel 工作表?
- css - CSS之前或边框或其他东西不能立即工作
- pyspark - 在 PySpark 中的 window.partitionBy 上查找从中提取最小值的行值
- botframework - 使用 CSS 隐藏和显示 React WebChat 时重新连接问题