gpt4 book ai didi

java - Jsoup 选择其子元素不包含特定标记的元素

转载 作者:搜寻专家 更新时间:2023-11-01 02:01:27 25 4
gpt4 key购买 nike

我正在使用 Jsoup 从网页中提取链接,但我想避免使用 img 链接。所以下面的代码:

Document doc = Jsoup.connect(i_Url).userAgent("chrome/5.0").get();
Elements links = doc.select("a[href]");

会给我所有的链接,但其中一些是图片。执行以下操作:

links.stream().filter(link -> !link.tagName().equals("img"));

不会工作,因为元素的 (=link) child 是带有 img 标签的元素,例如:

<a href="index.htm" title="tutorialspoint">
<img alt="tutorialspoint" src="/java/images/logo.png">
</a>

我尝试了各种方法,例如:

Elements links = doc.select("a[href]").select(":not(img)"); //or
Elements links = doc.select("a[href]:not(img)"); //or
Elements links = doc.select("a[href]")
links.stream().filter(link -> link.children().contains(Tag.valueOf("img")));

我只是尝试了各种变体,但没有一个奏效。在 html 方面,我不是专家。帮助将不胜感激。谢谢

最佳答案

使用以下选择器:

a[href]:not(:has(img))

我刚刚通过以下单元测试对其进行了测试,效果非常好:

@Test
public void testParsingLinksWithoutImagesInside() {
//given:
String html = "<a href=\"index.htm\" title=\"tutorialspoint\">\n" +
" <img alt=\"tutorialspoint\" src=\"/java/images/logo.png\">\n" +
"</a>";

//when:
Document document = Jsoup.parse(html);
Elements elements = document.select("a[href]:not(:has(img))");

//then:
assertThat(elements.size()).isEqualTo(0);
}

希望对你有帮助:)

关于java - Jsoup 选择其子元素不包含特定标记的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com