问题
您希望使用CSS或类似jquery的选择器语法来查找或操作元素。
解
使用[Element.select(String selector)](https://jsoup.org/apidocs/org/jsoup/nodes/Element.html#select-java.lang.String-)
和[Elements.select(String selector)](https://jsoup.org/apidocs/org/jsoup/select/Elements.html#select-java.lang.String-)
方法:
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Elements links = doc.select("a[href]"); // a with href
Elements pngs = doc.select("img[src$=.png]");
// img with src ending .png
Element masthead = doc.select("div.masthead").first();
// div with class=masthead
Elements resultLinks = doc.select("h3.r > a"); // direct a after h3
描述
jsoup元素支持CSS(或jquery)之类的选择器语法来查找匹配元素,从而允许非常强大和健壮的查询。
该select
方法在一个可用[Document](https://jsoup.org/apidocs/org/jsoup/nodes/Document.html)
,[Element](https://jsoup.org/apidocs/org/jsoup/nodes/Element.html)
或在[Elements](https://jsoup.org/apidocs/org/jsoup/select/Elements.html)
。它是上下文的,因此您可以通过从特定元素中进行选择或通过链接选择调用来进行过滤。
Select返回一个Elements列表(as [Elements](https://jsoup.org/apidocs/org/jsoup/select/Elements.html)
),它提供了一系列提取和操作结果的方法。
选择器概述
tagname
:按标签查找元素,例如[a](https://jsoup.org/apidocs/org/jsoup/select/Evaluator.CssNthEvaluator.html#a)
ns|tag
:在命名空间中按标记fb|name
查找<fb:name>
元素,例如查找元素#id
:按ID查找元素,例如#logo
.class
:按类名查找元素,例如.masthead
[attribute]
:具有属性的元素,例如[href]
[^attr]
:具有属性名称前缀的[^data-]
元素,例如查找具有HTML5数据集属性的元素[attr=value]
:具有属性值的元素,例如[width=500]
(也是可引用的[data-name='launch sequence']
)[attr^=value]
,[attr$=value]
,[attr*=value]
:用与启动属性,以结束,或包含所述的值,例如元素[href*=/path/]
[attr~=regex]
:具有与正则表达式匹配的属性值的元素; 例如img[src~=(?i)\.(png|jpe?g)]
-
选择器组合
el#id
:具有ID的元素,例如div#logo
el.class
:带有类的元素,例如div.masthead
el[attr]
:具有属性的元素,例如a[href]
- 任何组合,例如
a[href].highlight
ancestor child
:从祖先下降的子元素,例如在类“body”的块下的任何位置.body p
查找p
元素parent > child
:直接从父级下降的子元素,例如div.content > p
查找p
元素; 并body > *
找到body标签的直接子节点siblingA + siblingB
:找到兄弟B元素之后紧接着兄弟A,例如div.head + div
siblingA ~ siblingX
:找到兄弟A前面的兄弟X元素,例如h1 ~ p
el, el, el
:对多个选择器进行分组,找到与任何选择器匹配的唯一元素; 例如div.masthead, div.logo
伪选择器
:lt(n)
:找到其兄弟索引(即它在DOM树中相对于其父节点的位置)小于的元素n
; 例如td:lt(3)
:gt(n)
:查找兄弟索引大于的元素n
; 例如div p:gt(2)
:eq(n)
:查找兄弟索引等于的元素n
; 例如form input:eq(1)
:has(selector)
:查找包含与选择器匹配的元素的元素; 例如div:has(p)
:not(selector)
:查找与选择器不匹配的元素; 例如div:not(.logo)
:contains(text)
:查找包含给定文本的元素。搜索不区分大小写; 例如p:contains(jsoup)
:containsOwn(text)
:查找直接包含给定文本的元素:matches(regex)
:查找文本与指定正则表达式匹配的元素; 例如div:matches((?i)login)
:matchesOwn(regex)
:查找自己的文本与指定正则表达式匹配的元素- 注意,上面的索引伪选择器是基于0的,即第一个元素是索引0,第二个元素是1,等等
有关[Selector](https://jsoup.org/apidocs/org/jsoup/select/Selector.html)
完整支持的列表和详细信息,请参阅API参考。