让我们说我正在寻找两个兄弟节点A
和B
。他们会满足选择器
root.select("A ~ B")
并且该选择器将返回所有此类B
s。
但如果我需要所有A
/ B
对,该怎么办?我目前正在做以下事情:
root.select("A").stream()
.filter(a -> a.parent() != null)
.forEach(a -> {
Element b = a.parent().select("B:gt(" + a.elementSiblingIndex() + ")").first();
if (b != null) {
// do something with a and b
}
});
这大概是正确的成语吗? a.parent().select()
似乎很笨拙,但我无法找到更简单的方法。
答案 0 :(得分:0)
我认为您的方法没有任何问题。如果您不想使用a.parent().select()
,则可以使用siblingElements()
获得相同的结果:
root.select("A~B").stream().forEach(b -> {
List<Element> siblings = b.siblingElements().subList(0, b.elementSiblingIndex());
Collections.reverse(siblings);
for (Element a : siblings) {
if(a.nodeName().equals(B)) break;
if(a.nodeName().equals(A)){
// do something with a and b
}
}
});