如何通过jsoup获取元素对?

时间:2016-10-24 18:43:02

标签: jsoup

让我们说我正在寻找两个兄弟节点AB。他们会满足选择器

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()似乎很笨拙,但我无法找到更简单的方法。

1 个答案:

答案 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
        }
    }
});