Как мне остановить 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 году, так что, возможно, он будет вскоре реализован.