首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在XMLReader中使用TagHandler.handleTag(.)

如何在XMLReader中使用TagHandler.handleTag(.)
EN

Stack Overflow用户
提问于 2012-08-08 13:14:05
回答 1查看 2.9K关注 0票数 3

我试图将列表(<ul><ol>)添加到TextView中。通常将HTML加载到TextView中

代码语言:javascript
复制
textview.setText(Html.fromHtml("some String with HTML in it"));

但这并不适用于所有HTML标记。您可以使用覆盖默认的TagHandler扩展对不同标记的支持,并使用

代码语言:javascript
复制
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>数据(或者通常是任何具有其内容的元素)

代码语言:javascript
复制
if (tag.equals("ul")) {
  // some call to xmlReader
}

是的,我已经看过这些线索了。我只是在寻找另一种解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-20 11:14:06

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“元素的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11865334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档