2

次のコードを実行すると:

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のために を構築したい" "。私は何か間違ったことをしていますか、それとも問題ですHTMLDocumentHTMLEditorKit?

4

2 に答える 2

1
  • これがなぜ起こっているのかについての説明を期待しています。

これは、HTML で空白を折りたたんだ結果です。挿入するスペースは 2 つの<dyn/>タグの間にある唯一のものであるため、パーサーによって無視され、LeafElement によって表されません。

  • 考えられる解決策

camickr が述べたように、すべての空白を保持するには、改行しないスペース エンティティを使用する必要があります。ただし、HTML を制御することはできないため、最善の策は HTMLEditorKit のパーサーをカスタマイズすることです。おそらく、次のリソースが役に立つかもしれません。

お役に立てれば!

于 2013-11-09T16:08:22.960 に答える
1

エディタ キットについてはよくわかりませんが&nbsp;、" " の代わりに使用できるかもしれません。

于 2009-08-21T19:04:16.293 に答える