簡體   English   中英

使用Jsoup保留內部HTML時,HTML解析和除去錨標記

[英]HTML Parsing and removing anchor tags while preserving inner html using Jsoup

我必須解析一些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將會丟失,如何保留僅刪除start和close標記的內部HTML。

另外,請注意:我知道有一些方法可以從元素中獲取externalHTML()和innerHTML(),但是這些方法僅提供了檢索文本的方法,remove()方法將刪除標記的完整html。 有什么方法只能刪除外部標簽並保留innerHTML?

在此先感謝您,並感謝您的幫助。

-拉傑什

使用unwrap,它將保留內部html

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

檢查api-docs以獲得更多信息:
http://jsoup.org/apidocs/org/jsoup/select/Elements.html#unwrap%28%29

首先提取內部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,而不是使用文本節點。 如果鏈接中不僅包含文本,甚至可能需要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM