如何查询(选择)不包含其子元素的元素?

时间:2015-11-03 23:55:01

标签: jsoup

Element.select()返回可能包含此元素或其任何子元素的匹配元素。有什么方法可以查询这个元素但不包括它的孩子吗?

例如,我想知道元素是否与查询条件匹配,例如“P,李”。我知道我可以使用Element.getElementsByxxx()方法,但由于查询可以是标记或属性或其他一些条件,因此Element.getElementsByxxx()将不起作用。这将是很好的Element.select()可以限制对给定元素的查询。可能吗?感谢。

1 个答案:

答案 0 :(得分:1)

您可以添加否定仅匹配根元素::not(*>*)这意味着相关元素不得包含任何直接父元素。例如,考虑这个HTML内容:

<div class="test"><p class="test2">xxx</p><p>yyy</p></div>

如果e是外div元素:

!e.select("div:not(*>*)").isEmpty()    -> true
!e.select(".test:not(*>*)").isEmpty()  -> true
!e.select(".test2:not(*>*)").isEmpty() -> false
!e.select("li:not(*>*)").isEmpty()     -> false
!e.select("p:not(*>*)").isEmpty()      -> false

但不幸的是,伪选择器:not只修改了最后一个选择器:

!e.select("p,li:not(*>*)").isEmpty()   -> true

所以,如果你需要同时匹配多个选择器,我猜你需要一些逻辑。

我希望这就是你要求的。