我正在尝试在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。我可以用&lt; div style ='display:inline'&gt;相反,但它不受支持(只有HTML 3.2)...
我可以尝试任何解决方案吗?
谢谢!
答案 0 :(得分:0)
确定。我解决了这个问题:
我使用Jsoup作为解析器,因此我使用它来选择所有内部跨度。然后我将他们的内容复制到地图中,以便能够找回它们。我删除了内部跨度,我在htmlDocument中设置了修改后的html,最后,我在htmlDocument中手动查找了外部跨度,这要归功于它们的ID并从地图中插入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);