問題
你想使用類似于CSS或jQuery的文法來查找和操作元素。
方法
可以使用方法實作:Element.select(String selector)
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Elements links = doc.select("a[href]"); //帶有href屬性的a元素
Elements pngs = doc.select("img[src$=.png]");
//擴充名為.png的圖檔
Element masthead = doc.select("div.masthead").first();
//class等于masthead的div标簽
Elements resultLinks = doc.select("h3.r > a"); //在h3元素之後的a元素
說明
jsoup elements對象支援類似于CSS (或jquery)的選擇器文法,來實作非常強大和靈活的查找功能。.
這個select 方法在Document, Element,或Elements對象中都可以使用。且是上下文相關的,是以可實作指定元素的過濾,或者鍊式選擇通路。
Select方法将傳回一個Elements集合,并提供一組方法來抽取和處理結果。
Selector選擇器概述
-
: 通過标簽查找元素,比如:tagname
a
-
: 通過标簽在命名空間查找元素,比如:可以用ns|tag
文法來查找fb|name
元素<fb:name>
-
: 通過ID查找元素,比如:#id
#logo
-
: 通過class名稱查找元素,比如:.class
.masthead
-
: 利用屬性查找元素,比如:[attribute]
[href]
-
: 利用屬性名字首來查找元素,比如:可以用[^attr]
來查找帶有HTML5 Dataset屬性的元素[^data-]
-
: 利用屬性值來查找元素,比如:[attr=value]
[width=500]
-
,[attr^=value]
,[attr$=value]
: 利用比對屬性值開頭、結尾或包含屬性值來查找元素,比如:[attr*=value]
[href*=/path/]
-
: 利用屬性值比對正規表達式來查找元素,比如:[attr~=regex]
img[src~=(?i)\.(png|jpe?g)]
-
: 這個符号将比對所有元素*
Selector選擇器組合使用
-
: 元素+ID,比如:el#id
div#logo
-
: 元素+class,比如:el.class
div.masthead
-
: 元素+class,比如:el[attr]
a[href]
- 任意組合,比如:
a[href].highlight
-
: 查找某個元素下子元素,比如:可以用ancestor child
查找在"body"元素下的所有.body p
元素p
-
: 查找某個父元素下的直接子元素,比如:可以用parent > child
查找div.content > p
元素,也可以用p
查找body标簽下所有直接子元素body > *
-
: 查找在A元素之前第一個同級元素B,比如:siblingA + siblingB
div.head + div
-
: 查找A元素之前的同級X元素,比如:siblingA ~ siblingX
h1 ~ p
-
:多個選擇器組合,查找比對任一選擇器的唯一進制素,例如:el, el, el
div.masthead, div.logo
僞選擇器selectors
-
: 查找哪些元素的同級索引值(它的位置在DOM樹中是相對于它的父節點)小于n,比如::lt(n)
表示小于三列的元素td:lt(3)
-
:查找哪些元素的同級索引值大于:gt(n)
n
:,比如
表示哪些div中有包含2個以上的p元素div p:gt(2)
-
: 查找哪些元素的同級索引值與:eq(n)
相等,比如:n
表示包含一個input标簽的Form元素form input:eq(1)
-
: 查找比對選擇器包含元素的元素,比如::has(seletor)
表示哪些div包含了p元素div:has(p)
-
: 查找與選擇器不比對的元素,比如::not(selector)
表示不包含 class=logo 元素的所有 div 清單div:not(.logo)
-
: 查找包含給定文本的元素,搜尋不區分大不寫,比如::contains(text)
p:contains(jsoup)
-
: 查找直接包含給定文本的元素:containsOwn(text)
-
: 查找哪些元素的文本比對指定的正規表達式,比如::matches(regex)
div:matches((?i)login)
-
: 查找自身包含文本比對指定正規表達式的元素:matchesOwn(regex)
- 注意:上述僞選擇器索引是從0開始的,也就是說第一個元素索引值為0,第二個元素index為1等