HTML解析并删除锚标记,同时使用Jsoup保留内部html

时间:2013-06-10 20:55:11

标签: java html-parsing jsoup

我必须解析一些html并删除锚标签,但我需要保留anchor标签的innerHTML

例如,如果我的html文本是:

String html = "<div> <p> some text <a href="#"> some link text </a> </p> </div>"

现在我可以解析上面的html并在jsoup中选择一个像这样的标签,

Document doc = Jsoup.parse(inputHtml);

//this would give me all elements which have anchor tag
Elements elements = doc.select("a");

我可以删除所有这些,

element.remove()

但它会将完整的achor标记从开始括号移除到关闭括号,内部的html会丢失,如何保留内部HTML,只删除开始和关闭标记。

  

另外,请注意:我知道有方法可以获得outerHTML()和   innerHTML()来自元素,但那些方法只能给我提供方法   检索文本,remove()方法删除完整的html   标签。有什么方法我只能删除外部标签   并保留innerHTML?

非常感谢您,感谢您的帮助。

- 拉杰什

2 个答案:

答案 0 :(得分:4)

使用unwrap,它保留内部html

doc.select("a").unwrap();

查看api-docs了解更多信息:
http://jsoup.org/apidocs/org/jsoup/select/Elements.html#unwrap%28%29

答案 1 :(得分:1)

如何首先提取内部HTML,将其添加到DOM然后删除标记?这段代码未经测试,但应该可以解决问题:

修改

我更新了代码以使用replaceWith(),使代码更直观,效率更高;感谢 A.J。在评论中提示。

Document doc = Jsoup.parse(inputHtml);
Elements links = doc.select("a");
String baseUri = links.get(0).baseUri();
for(Element link : links) {
    Node linkText = new TextNode(link.html(), baseUri);
    // optionally wrap it in a tag instead:
    // Element linkText = doc.createElement("span");
    // linkText.html(link.html());
    link.replaceWith(linkText);
}

您可以将内部html包装在您想要的任何内容中,而不是使用文本节点;如果您的链接中不仅包含文字,您甚至可能需要这样做。