如何阻止HTMLWriter编写错误的HTML? (使用HTMLEditorKit)

时间:2012-07-19 09:41:08

标签: java htmleditorkit htmlwriter

这是令人惊讶的行为。我创建了一个JTextPane,将其设置为使用HTMLEditorKit,并使用有效的HTML填充它。但默认情况下,Java的HTMLWriter会创建 无效 HTML。大多数项目都是正确序列化的,但img标签会丢失它们的结束斜杠:

<img src="https://localhost:9443/ccm/service/com.ibm.team.workitem.common.internal.model.IImageContentService/processattachment/_7rfpIMXdEeGLRroh_7O2yQ/workflow/resolve.gif" alt="Resolved" border="0"/>

写成:

<img src="https://localhost:9443/ccm/service/com.ibm.team.workitem.common.internal.model.IImageContentService/processattachment/_7rfpIMXdEeGLRroh_7O2yQ/workflow/resolve.gif" alt="Resolved" border="0">

我正在使用默认值。为什么它不起作用,有什么简单的解决方法吗?

以下是代码段:

    JTextPane editor = new JTextPane();
    HTMLEditorKit htmlKit = new HTMLEditorKit();
    editor.setContentType("text/html");
    editor.setEditorKit(htmlKit);   
    editor.setText( '*<ADD SOME VALID HTML FROM A FILE>*'  );       
    HTMLDocument d = (HTMLDocument)editor.getDocument();
    StringWriter fw = new StringWriter();
    HTMLWriter aHTMLWriter = new HTMLWriter(fw,d);
    aHTMLWriter.write();
    String txt = fw.toString();
    //  Now  txt is not valid HTML ... eek!

2 个答案:

答案 0 :(得分:1)

遗憾的是,HTMLEditorKit仅支持HTML 3.2,因此不应关闭img标记。所以它表现得“正确”。

A Request for enhancement于1999年发布,所以也许很快就会实施。

答案 1 :(得分:0)

实际上,它是有效的HTML,但它不是有效的XHTML。据我所知,不可能让它输出XHTML。您可以使用正则表达式对输出进行后处理,或者像Freeplane在编写XHTMLWriter时一样扩展HTMLWriter。