2009-08-21 9 views
1

私は次のコードを実行すると:私は" "contentの値を変更した場合、しかし、HTMLDocumentの、のHTMLEditorKit、および空白

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

:私は次の出力を得る

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); 
     } 

String content = " "; 

私はこの出力を得ます:

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

コンテンツがの場合はLeafElement、なぜなら" "の場合は生成されないのはなぜですか?私はLeafElement" "のために構築したいと思う。私は何か間違っているのですか?これはHTMLDocumentまたはHTMLEditorKitの問題ですか?

答えて

1
  • なぜこれが起こっているのかを説明したいと思います。

これは、HTMLの空白の崩壊の単なる製品です。挿入しようとしているスペースは、2つの<dyn/>タグの間の唯一のものなので、パーサによって無視され、したがってLeafElementによって表されません。

  • 解決策

camickrが述べたように、あなたはすべての空白を維持するために改行なしスペースの実体を使用する必要があります。しかし、HTMLを制御できないので、HTMLEditorKitのパーサーをカスタマイズするのが最善の方法です。おそらく、次のリソースが便利に来ることがあります。

・ホープ、このことができます!

+0

@ Paul-Reinersねえ!長い間、答えを受け入れてくれてありがとう。 – hqcasanova

1

エディタキットについてよく知りませんが、おそらく ""の代わりに&nbsp;を使用できます。

+0

私はそれについて考えました。 HTMLは他の場所から来ています(私が示しているよりもはるかに複雑です)。 「 」という文字を挿入する必要がありますが、それは確かに可能です。しかし、私はなぜこれが起こっているのかの説明を期待しています。 –

関連する問題