我的目的是编辑HTML文档,包括修改现有元素,删除元素和插入新元素。
我已经阅读了HTMLEditorKit和相关类的文档,以及Sun的Java Trail中的相关主题,但是关于实际HTML文档操作的信息很少。大多数讨论和示例涉及阅读和解析HTML,而不是真正编辑它。一些谷歌搜索仍然没有产生足够的解决方案,并试图通过一些编码试验和错误解决任务主要导致例外。
我已经在SO中查阅了相关问题和答案,但大多数答案提出了一些替代方案,而我正在寻找JDK中的解决方案。也许HTMLEditorKit对非摆动应用程序没有多大用处,javax.swing之外还有另外一种选择?
以下是我想学习如何执行的一些任务:
<script>
元素的正则表达式。假设HTMLEditorKit是JDK中最好的HTML编辑组件,你推荐什么教程或参考?
答案 0 :(得分:2)
HTMLEditorKit
不是HTML编辑器,而是文档模型的编辑器,允许将这些文档模型从HTML转换为HTML。编辑器工具包的内部模型是不“HTML”,但基于DefaultStyledDocument
。令你困惑的是有一个HTMLDocument
类。但这只是DefaultStyledDocument
的一个瘦包装器,因此它可以从HTML创建并保存为HTML。
您需要的是HTML解析器。试试jTidy。它将读取HTML,构建一个内部模型(保留<script>
HTMLEditorKit
将忽略的内容。然后,您可以使用DOM API修改模型。
也就是说,对于许多用例来说,使用正则表达式或简单的字符串搜索和替换来过滤HTML就足够了。
答案 1 :(得分:2)
我不了解你,但我想如果你试图操纵的html页面不是很复杂,那么你可以自己建造它:
HTMLDocument doc = new HTMLDocument();
HTMLEditorKit kit = new HTMLEditorKit();
jEditorPane.setDocument(doc);
jEditorPane.setEditorKit(kit);
kit.insertHTML(doc, doc.getLength(), "<label> This label will be inserted inside the body directly </label>", 0, 0, null);
kit.insertHTML(doc, doc.getLength(), "<br/>", 0, 0, null);
kit.insertHTML(doc, doc.getLength(), putYourVariableHere, 0, 0, null);
这样你就可以完全控制html,加载速度比从外部html加载要快。
答案 2 :(得分:0)
如果存在使用HTMLDocument
和HTMLEditorKit
编辑HTML文档的任何教程,我不会这样做。 JDK实现有些限制,但在内部它创建了一个类似于DOM的元素树。您可以使用getRootElements()方法从HTMLDocument访问树:
Element html = doc.getRootElements()[0];
此处doc
是HTMLDocument
的实例。我认为使用HTMLDocument
编辑HTML并不容易,但有可能,请参阅以下方法:
insertAfterEnd(Element elem, String htmlText)
insertAfterStart(Element elem, String htmlText)
insertBeforeEnd(Element elem, String htmlText)
insertBeforeStart(Element elem, String htmlText)
setInnerHTML(Element elem, String htmlText)
setOuterHTML(Element elem, String htmlText)
所有这些方法都接受Element
作为编辑发生的参考点。您可以使用其方法遍历元素的树结构,并向您展示了如何获取对树的根的引用。
使用这些方法,您可以编写可视化HTML编辑器。只是为了显示您的HTML模型,请在setEditable(false)
对象上调用JEditorPane
方法。
有关如何使用JEditorPane
模型操作加载到HTMLDocument
的HTML内容的一个非常简单的示例,请参阅my sample application答案中的another HTML-related question,特别是propertyChange
甚至处理程序的代码。
虽然要对HTML有更多控制权,但我建议使用一个创建HTML DOM的库并允许修改它。