开心的大海 · 改变随机森林分类器的阈值· 1 年前 · |
失望的跑步鞋 · 使用 SQL Worksheet 编写基本 ...· 1 年前 · |
含蓄的汽水 · 现在Handler()被弃用了,我应该用什么?· 1 年前 · |
高兴的板栗 · iOS Audio ...· 1 年前 · |
乖乖的椅子 · Access数据库自增长字段值的修改及初始值 ...· 1 年前 · |
我试图将列表(
<ul>
,
<ol>
)添加到TextView中。通常将HTML加载到TextView中
textview.setText(Html.fromHtml("some String with HTML in it"));
但这并不适用于所有HTML标记。您可以使用覆盖默认的 TagHandler 扩展对不同标记的支持,并使用
textview.setText(Html.fromHtml("some String with HTML in it", null, new MyTagHandler()));
问题是: xmlReader在
android.text.Html.TagHandler.handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader)
中包含什么?是否有可能以某种方式获取所有
<li>
<ul>
数据(或者通常是任何具有其内容的元素)
if (tag.equals("ul")) {
// some call to xmlReader
}
是的,我已经看过这些线索了。我只是在寻找另一种解决方案。
XMLReader实际上只是一个接口,它定义的方法可以从 API文档 中读取。
用于处理 Html 类中的SAX事件的 Html 称为 Html.HtmlToSpannedConverter ,而 Html.HtmlToSpannedConverter 则使用其私有的 handleStartTag(字符串,属性) 方法来处理HTML元素的起始标记。因此,“开箱即用”支持的元素列表似乎是br、p、div、em、b、strong、cite、dfn、i、大、小、字体、区块引号、tt、a、u、sup、sub、h1...h6和img。最后,如果标记未被识别,则使用作为参数提供给 TagHandler 的HtmlToSpannedConverter,如果它不是null。
SAX处理程序的思想是,您只能从它获得事件:这里有一个开始标记,这里有一个CDATA块,还有一个结束标记等等。处理一个
DocumentBuilder
文档的另一种方法是使用一个
文档
创建它的一个
文档
对象。当您可能有一个可能不太适合内存的大型输入流时,或者当您需要快速解析一个文档时,或者当您从某个地方接收数据并希望在您收到所有数据之前动态解析它时,就会使用SAX解析器。因此,当使用SAX处理程序时,不可能在XML流中来回跳。因此,总结一下您的问题的答案:“是否有可能获得
<ul>
的所有
<ul>
数据”:不,不幸的是没有。
在您的TagHandler中,当您遇到一个开头的"ul“标记时,您可能会想要发出一个换行符;当您输入一个开头的"li”标记时,您可能要发出一个“·”;当您遇到一个结束的"li“或"ul”标记时,您可能会再次发出换行符。
如果您需要支持嵌套列表,您可以向您的TagHandler中添加一个计数器,以便当您遇到一个打开的"ul“时,它会增加,当遇到一个关闭的"ul”时,它会减少。然后,您可以根据嵌套列表的计数器为项目点添加不同数量的缩进。
另一种方法是在遇到开始标记时向元素添加元素,并在遇到结束标记时将其移除,从而创建一个元素堆栈。通过遍历堆栈,在任何给定时间都可以很容易地计算出祖先"ul“元素的数量。
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券