2

我必须解析一些 html 并删除锚标签,但我需要保留锚标签的 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 吗?

非常感谢您的帮助。

——拉杰什

4

2 回答 2

5

使用 unwrap,它会保留内部 html

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

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

于 2014-01-08T22:51:22.780 回答
1

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

编辑:

我更新了要使用的代码replaceWith(),使代码更直观,可能更高效;感谢AJ在评论中的提示。

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 包装成任何您想要的东西,而不是使用文本节点;如果您的链接中不仅有文本,您甚至可能不得不这样做。

于 2013-06-11T01:47:03.780 回答