[英]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.