【发布时间】:2023-03-10 17:37:02
【问题描述】:
我正在研究一种采用 HTML 字符串并返回类似的方法
javax.swing.text.html.HTMLDocument
最有效的方法是什么?
我目前这样做的方式是使用 SAX 解析器来解析 HTML 字符串。我会记录我何时点击打开的标签(例如,)。当我点击相应的结束标签(例如,)时,我将斜体样式应用于我在中间点击的字符。
这当然有效,但速度还不够快。有更快的方法吗?
【问题讨论】:
我正在研究一种采用 HTML 字符串并返回类似的方法
javax.swing.text.html.HTMLDocument
最有效的方法是什么?
我目前这样做的方式是使用 SAX 解析器来解析 HTML 字符串。我会记录我何时点击打开的标签(例如,)。当我点击相应的结束标签(例如,)时,我将斜体样式应用于我在中间点击的字符。
这当然有效,但速度还不够快。有更快的方法吗?
【问题讨论】:
尝试使用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);
【讨论】:
我的第一段。
\n" + "\n" + "\n" + "";最终的 HTMLDocument htmlDocument = MyHTMLDocumentLoader.makeHTMLDocument(hTML); htmlDocument.dump(System.out); }
HTMLEditorKit 对HTML 支持的弱点;根据javadoc,“这个类提供了默认支持,它支持HTML 3.2版(带有一些扩展),并且正在向4.0版迁移”——恐怕你需要在回调中手动处理标签- 不确定这是否比你原来的方法更好:(
您可以尝试使用HTMLDocument.setOuterHTML 方法。只需添加一个随机元素,然后用您的 HTML 字符串替换它。
【讨论】:
同意mouser,但稍作修正
Reader stringReader = new StringReader(string);
HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
htmlKit.read(stringReader, htmlDoc, 0);
【讨论】: