-1

このテキストを HTMLDocument に挿入しようとしています:

<html><span class='stuff' id='X'><span id='Y'>content</span></span></html>

このコードを使用して:

String test = "<html><span class='stuff' id='X'><span id='Y'>content</span></span></html>";
editorKit.read(new StringReader(test), htmlDocument, 0);

ドキュメントからこれを読むことを期待しています:

<html><head></head><body><span class='stuff' id='X'><span id='Y'>content</span></span></body></html>

しかし、私は代わりにこれを読みました:

<html><head></head><body><span id="Y">content</span></body></html>

外側のスパンが消えました(残念ながら、私にとってはそれが最も重要でした)。

これは、Java が同じ開始位置と終了位置を持つ 2 つの Span ノードを検出し、それらを融合するために発生していると思います。しかし、なぜ HTMLDocument は、私たちが彼に与えている html をそのまま保持しないのでしょうか?!!! とにかく、そのように2つのIDを重ねる必要があります。代わりに < div style='display:inline' > を使用できますが、サポートされていません (HTML 3.2 のみ)...

私が試すことができる解決策はありますか?

ありがとう !

4

1 に答える 1

0

Ok。私はこのように問題を解決しました:

私は Jsoup をパーサーとして使用していたので、それを使用してすべての内部スパンを選択しました。次に、それらのコンテンツをマップにコピーして、それらを見つけられるようにしました。内側のスパンを削除し、変更した html を htmlDocument に設定し、最後に、ID のおかげで htmlDocument の外側のスパンを手動で見つけ、 Map から読み取った html を挿入します。

    Document doc = Jsoup.parse(data);
    Elements elements = doc.select("span span");
    HashMap<String, String> map = new HashMap<String,String>();
    for(Element e : elements) {
        Element parent = e.getParent();
        map.put(parent.attr("id"),e.outerhtml());
        parent.html("PENDING");//the node should not be empty otherwise HTMLDocument will think it is free to remove it...
    }
    editorKit.read(new StringReader(doc.html()), htmlDocument, 0);
    javax.swing.text.Element element = htmlDocument.getElement(id);
    int position = element.getStartOffset();
    new HTMLEditorKit().insertHTML(htmlDocument,position,map.get(id),1,0,Tag.SPAN);
于 2013-06-21T11:09:27.713 に答える