从 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); 它转储了这个:
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 中)的主要内容,如果未能解决你的问题,请参考以下文章
将 HTML 渲染到窗口是不是需要 CLSID_WebBrowser,或者只需要 CLSID_HTMLDocument?