我必须解析一些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?
非常感谢您,感谢您的帮助。
- 拉杰什
答案 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包装在您想要的任何内容中,而不是使用文本节点;如果您的链接中不仅包含文字,您甚至可能需要这样做。