HTMLDocument, HTMLEditorKit и пробелы

Когда я запускаю следующий код:

import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

import javax.swing.text.BadLocationException;
import javax.swing.text.EditorKit;
import javax.swing.text.Element;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
    .
    .
    .
        String content = "x";
        String html = "<html><body><dyn/>" + content + "<dyn/></body></html>";
        final Reader reader = new StringReader(html);
        final EditorKit editorKit = new HTMLEditorKit();

        HTMLDocument hTMLDocument = new HTMLDocument();
        editorKit.read(reader, hTMLDocument, 0);
        Element defaultRootElement = hTMLDocument.getDefaultRootElement();
        Element branchElement = defaultRootElement.getElement(1).getElement(0);
        for (int i = 0; i < branchElement.getElementCount(); i++) {
            Element element = branchElement.getElement(i);
            System.out.print(element);
        }

Я получаю следующий вывод:

LeafElement(dyn) 1,2
LeafElement(content) 2,3
LeafElement(dyn) 3,4
LeafElement(content) 4,5

Однако, если я изменю значение content на " ":

    String content = " ";

Я получаю этот вывод:

LeafElement(dyn) 1,2
LeafElement(dyn) 2,3
LeafElement(content) 3,4

Почему контент LeafElement создан для "x", а не для " "? Я хочу построить LeafElement для " ". Я что-то не так делаю или это проблема с HTMLDocument или HTMLEditorKit?


person Paul Reiners    schedule 21.08.2009    source источник


Ответы (2)


  • Я надеюсь получить объяснение, почему это происходит.

Это просто результат коллапса пробелов в HTML. Поскольку это пространство, которое вы вставляете, является единственным, что находится между двумя тегами <dyn/>, оно игнорируется синтаксическим анализатором и, таким образом, не представляется LeafElement.

  • Возможное решение

Как упоминалось в camickr, вам придется использовать неразрывные пробелы, чтобы сохранить все пробелы. Но, поскольку у вас нет контроля над HTML, лучше всего настроить парсер HTMLEditorKit. Возможно, вам пригодятся следующие ресурсы:

Надеюсь это поможет!

person HQCasanova    schedule 09.11.2013
comment
@Paul-Reiners Привет! Большое спасибо, что приняли ответ после столь долгого времени. - person HQCasanova; 16.12.2013

Не много знаю о комплекте редактора, но, возможно, вы можете использовать &nbsp; вместо " ".

person camickr    schedule 21.08.2009
comment
Я думал об этом. HTML-код берется откуда-то еще (и он намного сложнее, чем то, что я показываю). Нам пришлось бы вставлять символы, что, конечно, возможно, если на то пошло. Но я надеюсь на объяснение, почему это происходит. - person Paul Reiners; 21.08.2009