允许'说我的html
变量中有String
代码;
String htmlCode = "<span class='test'>test</span>"+
+"<a href=\"http://foo.com?id=<span class='test'>test</span>\">link</a>";
htmlCode
变量将包含更多类似的链接,此外它还包含更多类似的spans
。
我想要替换标记<span
和</span>
之间的所有内容,包括那些跨度,但前提是它们位于<a href
标记中。这意味着我不想替换第一个span
标记,但我想替换第二个标记。
我知道正则表达式可以做到这一点,但到目前为止我能够做到这一点:
htmlCode = htmlCode.replaceAll("<span.*?</span>", "");
但是,如果我只想在<a>
标签中出现,我该如何定义?还有一种方法可以替换它,包括那些span
标签吗?
答案 0 :(得分:3)
如果我正确理解了您的问题,您想要从span
代码的href
值中删除a
个代码。
在这种情况下,您可以尝试使用类似
的内容String htmlCode = "<span class='test'>test</span>"
+ "<a href=\"http://foo.com?id=<span class='test'>test</span>\">link</a>"
+ "<a href=\"http://foo.com?id=test2\">link</a>";
Document doc = Jsoup.parse(htmlCode);
System.out.println(doc);
for (Element el : doc.select("a[href*=<span]")){//select a with href which contains `<span`
el.attr("href", Jsoup.parse(el.attr("href")).text());//sets new value for `href` attribute which will be
//parsed "http://foo.com?id=<span class='test'>test</span>" and text it represents
}
System.out.println("-----");
System.out.println(doc);
输出(之前/之后):
<html>
<head></head>
<body>
<span class="test">test</span>
<a href="http://foo.com?id=<span class='test'>test</span>">link</a>
<a href="http://foo.com?id=test2">link</a>
</body>
</html>
-----
<html>
<head></head>
<body>
<span class="test">test</span>
<a href="http://foo.com?id=test">link</a>
<a href="http://foo.com?id=test2">link</a>
</body>
</html>