XML中的解析的jsoup的selector类语法详解
先随意建一个xml文件,如下面student.xml:
<?xml version="1.0" encoding="UTF-8" ?> <students> <student number="heima_0001"> <name id="sn1"> <xing>张</xing> <ming>三</ming> </name> <age>18</age> <sex>male</sex> </student> <student number="heima_0002"> <name>jack</name> <age>18</age> <sex>female</sex> </student> </students>
然后编写我们一个demo:
public class JsoupDemo05 { public static void main(String[] args) throws IOException { //获取到xml文件的路径 String path= JsoupDemo05.class.getClassLoader().getResource("student.xml").getPath(); //获取document对象 Document document = Jsoup.parse(new File(path), "utf-8"); //开始使用 //根据标签名获得元素集 Elements elements = document.select("name"); System.out.println(elements); System.out.println("-------------"); //根据id名获得元素集 Elements elements1 = document.select("#sn1"); System.out.println(elements1); System.out.println("-------------"); Elements elements2 = document.select("student[number='heima_0001']"); System.out.println(elements2); System.out.println("-------------"); Elements elements3 = document.select("student[number='heima_0001'] > age"); System.out.println(elements3); System.out.println("-------------"); } }
Selector语法:
1.*:所有元素
2.tag:根据标签名来获得元素集 例如:div
3.#id:根据id名
4. .class:根据类名
5.[attr]:查出拥有attr属性的元素集 例如[number]、[id]
6.[^attrPrefix]:查出拥有attrPrefix开头属性的元素集 例如[^num]、[^i]
7.[attr=val]跟[attr="val"]:属性与属性值的元素集 例如[id="sn1"]
8.[attr^=valPrefix]:属性为“attr”且值以“valPrefix”开头的元素 例如[id^="s"]
9.[attr$=valSuffix]:属性为“attr”且值以“valSuffix”结尾的元素 例如[id$="n1"]
10.[attr*=valContaining]:属性为“attr”且值有包含“valContaining”的元素 例如[id*='n']
11.[attr~=regex]:具有名为“attr”的属性和与正则表达式匹配的值的元素
12.E F:F元素是E元素的后代
13.E > F:E的F直系子代
14.E + F:紧跟在同级E前面的F元素
15.E ~ F:前有同级E的F元素
16.E, F, G:所有匹配元素E、F或G
17.:lt(n):同级索引小于 n
18.:gt(n):同级索引大于 n
19.:eq(n):同级索引等于 n
20.:has(selector):包含至少一个与 选择器
21.:not(selector):不匹配的元素 选择器。另请参见 Elements.not(字符串)
22.:contains(text):包含指定文本的元素。搜索不区分大小写。文本可能出现在found元素或其任何子元素中。
23.:matches(regex):其文本与指定正则表达式匹配的元素。文本可能出现在found元素或其任何子元素中。
24.:containsOwn(text):直接包含指定文本的元素。搜索不区分大小写。文本必须出现在“已找到”对话框中
25.:matchesOwn(regex):其自身文本与指定正则表达式匹配的元素。文本必须出现在找到的元素中,而不是其任何子元素中。
26.:containsData(data):包含指定数据的元素。脚本和样式元素的内容以及注释节点(etc)被认为是数据节点,而不是文本节点。搜索不区分大小写。数据可能出现在找到的元素或其任何子元素中。
27.:matchText:将文本节点视为元素,因此允许您匹配和选择文本节点。
28.:root:作为文档根的元素。在HTML中,这是HTML元素
29.:nth-child(an+b):在文档树中,前面有+b-1同级的元素,表示任何正整数或零n值,并且有父元素。对于大于零的a和b值,这将有效地将元素的子元素划分为a元素的组(最后一组取余数),并选择每个组的第b个元素。例如,这允许选择器寻址表中的每一行,并可用于在四个循环中交替段落文本的颜色。a和b值必须是整数(正、负或零)。元素的第一个子元素的索引是1。
除此之外,:nth-child()还可以将奇数和偶数作为参数。奇数与2n+1的意义相同,偶数与2n的意义相同。
30.:nth-last-child(an+b):文档树中后面有+b-1同级的元素。否则类似于:nth-child()
31.:nth-of-type(an+b):伪类表示法表示一个元素,该元素在文档树中有一个+b-1同级元素,该同级元素前面有相同的扩展元素名(对于任何零整数值或正整数值n),并且有一个父元素
32.:nth-last-of-type(an+b):伪类表示法表示一个元素,该元素在文档树中的+b-1兄弟姐妹中的后面有相同的扩展元素名称,对于任何0或正整数值n,并且具有父元素
33.:first-child:作为其他元素的第一个子元素的元素。
34.:last-child:其他元素的最后一个子元素。
35.:first-of-type:在其父元素的子元素列表中作为其类型的第一个同级的元素
36.:last-of-type:是其父元素的子元素列表中其类型的最后一个同级的元素
37.:only-child:具有父元素且其父元素没有其他子元素的元素
38.:only-of-type:一种元素,它有一个父元素,而其父元素没有其他具有相同扩展元素名的子元素
39.:empty:没有子元素的元素