5

我的目的是编辑 HTML 文档,包括修改现有元素、删除元素和插入新元素。

我已经阅读了 HTMLEditorKit 和相关类的文档,以及 Sun 的 Java Trail 中的相关主题,但是关于实际 HTML 文档操作的信息很少。大多数讨论和示例都涉及阅读和解析 HTML,而不是真正编辑它。一些谷歌搜索仍然没有产生足够的解决方案,并且尝试通过一些编码试验和错误来解决任务主要导致异常。

我已经在 SO 中讨论了相关的问题和答案,但大多数答案都提出了一些替代方案,而我正在寻找 JDK 中的解决方案。或许 HTMLEditorKit 对于非 swing 应用程序用处不大,javax.swing 之外还有替代方案吗?

以下是我想学习如何执行的一些任务:

  • 替换某些文本字段中的文本。
  • <script>元素的基本编辑(查找/替换或正则表达式) 。
  • 为某些元素的边框着色。
  • 完全删除某些标签(例如 flash 元素)。

假设 HTMLEditorKit 是 JDK 中最好的 HTML 编辑组件,您推荐什么教程或参考资料?

4

3 回答 3

2

HTMLEditorKit不是 HTML 编辑器,而是文档模型的编辑器,它允许将这些文档模型从 HTML 转换为 HTML。编辑器套件的内部模型不是“HTML”,而是基于DefaultStyledDocument. 让你感到困惑的是有一个HTMLDocument类。但这只是一个瘦包装器,DefaultStyledDocument因此可以从 HTML 创建并保存为 HTML。

您需要的是一个 HTML 解析器。试试jTidy。它将读取 HTML,构建一个内部模型(保留将忽略的内容<script>HTMLEditorKit。然后,您可以使用 DOM API 来修改模型。

也就是说,对于许多用例,使用正则表达式或简单的字符串搜索和替换来过滤 HTML 就足够了。

于 2009-09-21T14:06:25.903 回答
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 加载要快。

于 2011-07-10T13:37:26.993 回答
0

如果有任何关于在 Java 中使用HTMLDocumentHTMLEditorKit编辑 HTML 文档的教程,我不知道。JDK 的实现有些局限,但在内部它创建了一个类似于 DOM 的元素树。您可以使用getRootElements()方法从 HTMLDocument 访问树:

Element html = doc.getRootElements()[0];

doc是一个实例HTMLDocument。我认为编辑 HTML 并不容易,HTMLDocument但有可能,请参阅以下方法:

所有这些方法都接受Element作为编辑发生的参考点。您可以使用它的方法遍历元素的树结构,我向您展示了如何获取对树根的引用。

使用这些方法,您可以编写可视化 HTML 编辑器。只是为了显示您的 HTML 模型,在对象上调用setEditable(false)方法。JEditorPane

有关如何操作JEditorPane使用HTMLDocument模型加载的 HTML 内容的非常简单的示例,请参阅我在另一个 HTML 相关问题的答案中的示例应用程序,特别是propertyChange偶数处理程序的代码。

虽然要对 HTML 进行更多控制,但我建议使用创建 HTML DOM 并允许对其进行修改的库。

于 2011-08-14T19:03:37.480 回答