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()

ただし、開始ブラケットから終了ブラケットまでの完全なアンカー タグが削除され、内部の HTML が失われます。開始タグと終了タグのみを削除する内部 HTML を保持するにはどうすればよいですか。

また、注意してください: 要素から outerHTML() および innerHTML() を取得するメソッドがあることは知っていますが、これらのメソッドはテキストを取得する方法のみを提供し、remove() メソッドはタグの完全な html を削除します。外側のタグのみを削除して innerHTML を保持する方法はありますか?

どうぞよろしくお願いいたします。

-- ラジェッシュ

4

2 に答える 2

5

unwrap を使用すると、内部の html が保持されます

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

詳細については、API ドキュメントを確認してください:
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 に答える