Как мне остановить HTMLWriter от написания плохого HTML? (используя HTMLEditorKit)

Здесь удивительное поведение. Я создаю JTextPane, настраиваю его на использование HTMLEditorKit и заполняю его допустимым HTML. Но по умолчанию HTMLWriter Java создает недопустимый 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 ответа

Решение

На самом деле это действительный HTML, но это не действительный XHTML. Насколько я знаю, невозможно получить его для вывода XHTML. Вы можете обработать вывод с помощью регулярных выражений или расширить HTMLWriter, как это сделал Freeplane, когда они писали XHTMLWriter.

К сожалению, HTMLEditorKit поддерживает только HTML 3.2, и для этого теги img не должны закрываться. Так что ведёт себя "правильно".

Запрос на улучшение был выпущен в 1999 году, так что, возможно, он будет вскоре реализован.

Другие вопросы по тегам