gpt4 book ai didi

java - 当前元素的下一个兄弟元素的选择器

转载 作者:行者123 更新时间:2023-12-01 09:15:48 26 4
gpt4 key购买 nike

使用纯 CSS 选择器语法而不是方法调用来选择下一个同级的方法是什么?

例如给定:

<div>Foo</div><whatever>bar</whatever>

if 元素 e代表div那么我需要选择<whatever>不管它是否是 <div><p>或其他什么。

String selectorForNextSibling = "... ";
Element whatever = div.select(selectorForNextSibling).get(0);

寻找这样的选择器的原因是拥有一个可以从兄弟节点或子节点获取数据的通用方法。

我正在尝试解析应用程序的 HTML,其中 div 的位置无法计算选择器。否则,这就像使用一样简单:

"div.thespecificDivID + div,div.thespecificDivID + p"

我本质上想要的是删除 div.thespecificDivID上面选择器的一部分(例如,如果这有效:“+div, +p”)

最佳答案

您可以直接使用sibling selector element + directSiblingwildcard selector * 结合使用

注意:由于您使用的是 jsoup,所以我包括 jsoups nextElementSibling()即使您请求:“不是方法调用”。

示例代码

String html = "<div>1A</div><p>1A 1B</p><p>1A 2B</p>\r\n" + 
"<div>2A</div><span>2A 1B</span><p>2A 2B</p>\r\n" +
"<div>3A</div><p>3A 1B</p>\r\n" +
"<p>3A 2B</p><div></div>";

Document doc = Jsoup.parse(html);

String eSelector = "div";

System.out.println("with e.cssSelector and \" + *\"");
// if you also need to do something with the Element e
doc.select(eSelector).forEach(e -> {
Element whatever = doc.select(e.cssSelector() + " + *").first();
if(whatever != null) System.out.println("\t" + whatever.toString());
});

System.out.println("with direct selector and \" + *\"");
// if you are only interested in Element whatever
doc.select(eSelector + " + * ").forEach(whatever -> {
System.out.println("\t" + whatever.toString());
});

System.out.println("with jsoups nextElementSibling");
//use jsoup build in function
doc.select(eSelector).forEach(e -> {
Element whatever = e.nextElementSibling();
if(whatever != null) System.out.println("\t" + whatever.toString());
});

输出

with e.cssSelector and " + *"
<p>1A 1B</p>
<span>2A 1B</span>
<p>3A 1B</p>
with direct selector and " + *"
<p>1A 1B</p>
<span>2A 1B</span>
<p>3A 1B</p>
with jsoups nextElementSibling
<p>1A 1B</p>
<span>2A 1B</span>
<p>3A 1B</p>

关于java - 当前元素的下一个兄弟元素的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40555787/

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