我的意图是编辑HTML文档,包括修改现有元素、删除元素和插入新元素。
我读过HTMLEditorKit和相关类的文档,以及Sun's Java Trail中的相关主题,但是关于实际HTML文档操作的信息很少。大多数讨论和示例都涉及到读取和解析HTML,而不是真正地编辑它。一些谷歌仍然没有给出一个足够的解决方案,试图通过一些编码试验和错误来解决这个问题,大多数都会导致异常。
在这里,我已经讨论了相关的问题和答案,但大多数答案都提出了一些替代方案,而我正在寻找JDK中的解决方案。也许HTMLEditorKit对非swing应用程序没有什么用处,而在javax.swing之外还有一种替代方案吗?
下面是一些我想学习如何执行的任务:
<script>元素的基本编辑(查找/替换或正则表达式)。假设HTMLEditorKit是JDK中最好的HTML编辑组件,您推荐什么教程或引用?
发布于 2009-09-21 14:06:25
HTMLEditorKit不是HTML编辑器,而是文档模型的编辑器,它允许将这些文档模型转换成HTML。编辑器工具包的内部模型不是"HTML“,而是基于DefaultStyledDocument的。令您困惑的是,存在一个HTMLDocument类。但是这只是一个DefaultStyledDocument的薄包装,所以它可以从HTML创建并保存为HTML。
您需要的是一个HTML解析器。试试jTidy。它将读取HTML,构建内部模型(保留<script>之类的内容,HTMLEditorKit将忽略这些内容)。然后,您可以使用DOM来修改模型。
也就是说,对于许多用例来说,使用正则表达式或简单的字符串搜索和替换来过滤HTML就足够了。
发布于 2011-07-10 13:37:26
我不知道你是怎么想的,但我认为如果你想要操作的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加载它更快。
发布于 2011-08-14 19:03:37
如果有使用HTMLDocument和HTMLEditorKit编辑Java的教程,我就没有。JDK实现有一定的局限性,但在内部它创建了一个类似于DOM的元素树。您可以使用HTMLDocument方法从getRootElements()访问树:
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内容的一个非常简单的示例,请参见对另一个与HTML相关的问题的答复中的我的示例应用程序,特别是propertyChange甚至处理程序的代码。
虽然为了对HTML有更多的控制,我还是建议使用一个库来创建HTML并允许修改它。
https://stackoverflow.com/questions/1453762
复制相似问题