从 HTML 字符串创建 HTMLDocument(在 Java 中)

Posted

技术标签:

【中文标题】从 HTML 字符串创建 HTMLDocument(在 Java 中)【英文标题】:Creating an HTMLDocument from a String of HTML (in Java) 【发布时间】:2011-10-05 14:21:39 【问题描述】:

我正在研究一种采用 html 字符串并返回类似的方法

 javax.swing.text.html.HTMLDocument

最有效的方法是什么?

我目前这样做的方式是使用 SAX 解析器来解析 HTML 字符串。我会记录我何时点击打开的标签(例如,)。当我点击相应的结束标签(例如,)时,我将斜体样式应用于我在中间点击的字符。

这当然有效,但速度还不够快。有更快的方法吗?

【问题讨论】:

【参考方案1】:

尝试使用HtmlEditorKit 类。它支持解析可以直接从String 读取的HTML 内容(例如通过StringReader)。 There seems to be an article 关于如何做到这一点。

编辑:举个例子,基本上我认为可以这样做(代码执行后,htmlDoc 应该包含加载的文档...):

Reader stringReader = new StringReader(string);
HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
HTMLEditorKit.Parser parser = new ParserDelegator();
parser.parse(stringReader, htmlDoc.getReader(0), true);

【讨论】:

这看起来正确,但似乎不起作用。考虑这个测试用例: public void testMakeHTMLDocument() throws Exception final String hTML = "\n" + "\n" + "\n" + "

My First Heading

\ n" + "\n" + "

我的第一段。

\n" + "\n" + "\n" + "";最终的 HTMLDocument htmlDocument = MyHTMLDocumentLoader.makeHTMLDocument(hTML); htmlDocument.dump(System.out);
它转储了这个:

[0,1][ ] [0,1][ ]

我有点担心这是因为HTMLEditorKit 对HTML 支持的弱点;根据javadoc,“这个类提供了默认支持,它支持HTML 3.2版(带有一些扩展),并且正在向4.0版迁移”——恐怕你需要在回调中手动处理标签- 不确定这是否比你原来的方法更好:(【参考方案2】:

您可以尝试使用HTMLDocument.setOuterHTML 方法。只需添加一个随机元素,然后用您的 HTML 字符串替换它。

【讨论】:

只是不要忘记:'为了正确工作,文档必须有一个 HTMLEditorKit.Parser 集。如果文档是通过 createDefaultDocument 方法从 HTMLEditorKit 创建的,就会出现这种情况。'【参考方案3】:

同意mouser,但稍作修正

Reader stringReader = new StringReader(string);
HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
htmlKit.read(stringReader, htmlDoc, 0);

【讨论】:

这真的对我有用,选择的答案没有。

以上是关于从 HTML 字符串创建 HTMLDocument(在 Java 中)的主要内容,如果未能解决你的问题,请参考以下文章

Android源码访问者模式---HtmlDocument

Android源码访问者模式---HtmlDocument

将 HTML 渲染到窗口是不是需要 CLSID_WebBrowser,或者只需要 CLSID_HTMLDocument?

全栈JavaScript之路(十六)HTML5 HTMLDocument 类型的变化

javascript操作后获取HtmlDocument

HTML Document是啥?