-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

好的。我解决了这样的问题:

我使用 Jsoup 作为解析器,所以我用它来选择所有内部跨度。然后我将它们的内容复制到地图中,以便能够找到它们。我删除了内部跨度,我在 htmlDocument 中设置了修改后的 html,最后,由于它们的 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 回答