一、Jsoup 解析步骤
步骤:
1、导入 jar 包(官网下载地址:Jsoup官网)
2、解析 XML文件
① 得到解析文件的路径:类加载器加载文件的路径
② 构建一个 File 对象
③ 调用 Jsoup 的 parse 方法解析 XML 文件得到一个 Document 对象
④ 调用 Document 的相关方法得到相关的标签对象(Element),Element 就是一个存放了 Element 对象的 ArrayList 集合
⑤ 调用 Element 的相关方法获取数据
XML 文件:
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
3
4
5 tom
6 18
7 male
8
9
10 jack
11 18
12 female
13
14
解析 XML:
1 packagecom.ks.jsoup;2
3 importorg.jsoup.Jsoup;4 importorg.jsoup.nodes.Document;5 importorg.jsoup.nodes.Element;6 importorg.jsoup.select.Elements;7
8 importjava.io.File;9 importjava.io.IOException;10
11 /**
12 * xml_解析_Jsoup_快速入门13 *
14 * 步骤:15 * 1,导入JAR16 * 2,解析XML文件17 * A,得到解析文件的路径:类加载器加载文件的路径18 * B,构建一个FILE对象19 * C,调用JSOUP的PARSE方法解析XML文件得到一个DOCUMENT对象20 * D,调用Document的相关方法得到相关的标签对象(Element)21 * Elements:就是一个存了Element对象的ArrayList集合22 * E ,调用Element的相关方法得到想要的数据23 */
24 public classJsoupDemo1 {25 public static void main(String[] args) throwsIOException {26 //1.获取xml解析文件的路径
27 String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml").getPath();28 //2.解析xml文档,加载文档进内存,获取 dom 树 --》获取document对象
29 Document document = Jsoup.parse(new File( path ),"UTF-8");30 //3.获取元素对象Element,返回值是存了Element对象的ArrayList集合
31 Elements name = document.getElementsByTag( "name");32 System.out.println(name.size());
33 //4.获取第一个name的Element对象
34 Element element = name.get( 0);35 //5.获取数据
36 String text =element.text();37 System.out.println(text);38 }39 }
二、Jsoup 对象的使用
1、Jsoup 类
Jsoup:工具类,可以解析 HTML 或 XML 文档,返回 Document 对象
parse:解析html或xml文档,返回Document
parse(File in, String charsetName):解析xml或html文件的。
parse(String html):解析xml或html字符串
parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
Demo:
1 packagejsoup;2 /**
3 * Jsoup对象功能4 */
5
6 importorg.jsoup.Jsoup;7 importorg.jsoup.nodes.Document;8
9 importjava.io.File;10 importjava.io.IOException;11 importjava.net.URL;12
13 public classJsoupDemo2 {14 public static void main(String[] args) throwsIOException {15 //获取xml解析文件的路径
16 String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml").getPath();17
18 //1.解析xml文档,加载文档进内存,获取document对象
19 Document document = Jsoup.parse(new File( path ),"UTF-8");20
21 //2.parse(String html):解析xml或HTML字符串
22 String str="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
23 "\n" +
24 "\n" +
25 "\t\n" +
26 "\t\ttom\n" +
27 "\t\t18\n" +
28 "\t\tmale\n" +
29 "\t\n" +
30 "\t\n" +
31 "\t\tjack\n" +
32 "\t\t18\n" +
33 "\t\tfemale\n" +
34 "\t\n" +
35 "";36 Document document1 =Jsoup.parse( str );37 //System.out.println(document1);38
39 //3.parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML或xml文档对象
40 URL url=new URL("https:www.baidu.com");41 Document document2 = Jsoup.parse( url,10000);42 //System.out.println(document2);
43
44
45 }46 }
View Code
2、Document 对象
Document对象:文档对象,代表内存中的 dom 树
获取 Element 对象的方法:
getElementById(String id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
Demo:
1 packagecom.ks.jsoup;2
3 importorg.jsoup.Jsoup;4 importorg.jsoup.nodes.Document;5 importorg.jsoup.select.Elements;6
7 importjava.io.File;8 importjava.io.IOException;9
10 /**
11 *Document/Elements对象12 */
13 public classJsoupDomo3 {14 public static void main(String[] args) throwsIOException {15 String path = JsoupDomo3.class.getClassLoader().getResource( "xml/student.xml").getPath();16 Document document = Jsoup.parse( new File( path ), "UTF-8");17
18 //1.获取所有的student对象
19 Elements student = document.getElementsByTag( "student");20 System.out.println(student);21 System.out.println("========================");22
23 //2.获取id属性的元素对象
24 Elements id = document.getElementsByAttribute( "id");25 System.out.println(id);26 System.out.println("========================");27
28 //3.根据id属性值获取唯一的element对象
29 Elements value = document.getElementsByAttributeValue( "id", "itcast");30 System.out.println(value);31 }32 }
View Code
3、Elements
Elements:元素 Element 对象的集合,可以当做 ArrayList 来使用
4、Element 对象
Element 表示元素对象
(1)获取子元素对象的方法
getElementById(String id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
(2)获取属性值的方法
String attr(String key):根据属性名称获取属性值
(3)获取文本内容
String text():获取所有子标签的纯文本内容
String html():获取标签体的所有内容(包括子标签和标签里面的内容的字符串内容)
Demo:
1 packagecom.ks.jsoup;2
3 importorg.jsoup.Jsoup;4 importorg.jsoup.nodes.Document;5 importorg.jsoup.nodes.Element;6 importorg.jsoup.select.Elements;7
8 importjava.io.File;9 importjava.io.IOException;10
11 /**
12 * Element对象13 */
14 public classJsoupDemo4 {15 public static void main(String[] args) throwsIOException {16 String path = JsoupDemo4.class.getClassLoader().getResource( "xml/student.xml").getPath();17 Document document = Jsoup.parse( new File( path ), "UTF-8");18
19 //通过document获取所有的name标签,可以获取两个
20 Elements name = document.getElementsByTag( "name");21 System.out.println(name.size());22
23 //通过element对象子标签对象,可以获取一个
24 Element ele_Student = document.getElementsByTag( "name" ).get( 0);25 Elements els_name = ele_Student.getElementsByTag( "name");26 System.out.println(els_name.size());27
28 //获取student对象的属性值
29 String number = ele_Student.attr( "number");30 System.out.println(number.length());31 //获取文本内容
32 String text =els_name.text();33 String html =els_name.html();34 System.out.println(text);35 System.out.println(html);36 }37 }
View Code
5、Node 对象
Node 表示节点对象,是 Document 和 Element 的父类
三、Jsoup 快捷查询方式
1、selector 选择器
使用的方法:Elements
Elements select(String cssQuery)
详细语法,参考 JavaAPI中 Selector 类中定义的语法。
Demo:
1 importorg.jsoup.Jsoup;2 importorg.jsoup.nodes.Document;3 importorg.jsoup.nodes.Element;4 importorg.jsoup.select.Elements;5
6 importjava.io.File;7 importjava.io.IOException;8
9 /**10 *选择器查询
11*/
12 public classJsoupDemo {13 public static void main(String[] args) throwsIOException {14 //1.获取student.xml的path
15 String path = JsoupDemo5.class.getClassLoader().getResource("student.xml").getPath();16 //2.获取Document对象
17 Document document = Jsoup.parse(new File(path), "utf-8");18
19 //3.查询name标签
20
21 Elements elements = document.select("name");22System.out.println(elements);23 System.out.println("=----------------");24 //4.查询id值为java的元素
25 Elements elements1 = document.select("#java");26System.out.println(elements1);27 System.out.println("----------------");28 //5.获取student标签并且number属性值为java_0001的age子标签
29 //5.1.获取student标签并且number属性值为java_0001
30 Elements elements2 = document.select("student[number=\"java_0001\"]");31System.out.println(elements2);32 System.out.println("----------------");33
34 //5.2获取student标签并且number属性值为java_0001的age子标签
35 Elements elements3 = document.select("student[number=\"java_0001\"] > age");36System.out.println(elements3);37
38}39
40 }
2、XPath
XPath 即为 xml 路径语言,它是一种用来确定 xml(标准通用标记语言的子级)文档中某部分位置的语言
使用步骤:
(1)使用 Jsoup 的 Xpath 需要额外导入 jar 包。
(2)使用 Xpath 语法完成查询。XPath 语法
Demo:
1 importcn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;2 importcn.wanghaomiao.xpath.model.JXDocument;3 importcn.wanghaomiao.xpath.model.JXNode;4 importorg.jsoup.Jsoup;5 importorg.jsoup.nodes.Document;6 importorg.jsoup.select.Elements;7 importjava.io.File;8 importjava.io.IOException;9 importjava.util.List;10
11 /**12 *XPath查询
13*/
14 public classJsoupDemo6 {15 public static void main(String[] args) throwsIOException, XpathSyntaxErrorException {16 //1.获取student.xml的path
17 String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();18 //2.获取Document对象
19 Document document = Jsoup.parse(new File(path), "utf-8");20
21 //3.根据document对象,创建JXDocument对象
22 JXDocument jxDocument = newJXDocument(document);23
24 //4.结合xpath语法查询
25 //4.1查询所有student标签
26 List jxNodes = jxDocument.selN("//student");27 for(JXNode jxNode : jxNodes) {28System.out.println(jxNode);29}30
31 System.out.println("--------------------");32
33 //4.2查询所有student标签下的name标签
34 List jxNodes2 = jxDocument.selN("//student/name");35 for(JXNode jxNode : jxNodes2) {36System.out.println(jxNode);37}38
39 System.out.println("--------------------");40
41 //4.3查询student标签下带有id属性的name标签
42 List jxNodes3 = jxDocument.selN("//student/name[@id]");43 for(JXNode jxNode : jxNodes3) {44System.out.println(jxNode);45}46 System.out.println("--------------------");47 //4.4查询student标签下带有id属性的name标签 并且id属性值为java
48
49 List jxNodes4 = jxDocument.selN("//student/name[@id='java']");50 for(JXNode jxNode : jxNodes4) {51System.out.println(jxNode);52}53}54
55 }