xml解析--Jsoup快速入门

jsoup

概念

Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

快速入门

步骤

  1. 导入jar包

    jsoup-1.11.2.jar
  2. 获取Document

  3. 获取对应的标签Element对象

  4. 获取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.xml.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;


/**
* @author OldAZ-PC
* Jsoup快速入门
*/
public class JsoupDemo1 {
public static void main(String[] args) throws Exception {
//2.获取Document对象,根据xml文档来获取
//2.1 获取student。xml的路径
String path = JsoupDemo1.class.getResource("student.xml").getPath();
//2.2解析xml文档,加载文档进入内存,获取dom树-->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());

//3.1获取第一个name的element对象
Element element = elements.get(0);

//3.2获取数据
String name = element.text();
System.out.println(name);

}
}

对象的使用

  1. Jsoup:工具类,可以解析html或者xml文档返回给Document对象。
  2. Document:文档对象,代表内存中的dom树
  3. Elements:元素Element对象的集合。可以当作ArrayList来使用
  4. Element:元素对象
  5. Node:节点对象

    Jsoup对象

    • parse:解析html或者xml文档,返回Document
      • parse(File in,String charsetName) :解析html或者xml文件的
      • parse(String html):解析xml或者html字符串的
      • parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML和xml的文档对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.xml.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.net.URL;


/**
* @author OldAZ-PC
* Jsoup对象功能
*/
public class JsoupDemo2 {
public static void main(String[] args) throws Exception {
//2.1 获取student。xml的路径
String path = JsoupDemo2.class.getResource("student.xml").getPath();
//2.2解析xml文档,加载文档进入内存,获取dom树-->Document
// Document document = Jsoup.parse(new File(path), "utf-8");
// System.out.println(document);

//parse(String html):解析xml或者html字符串的
String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
" <students xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
" \t\t\t xmlns=\"http://www.itcast.cn/xml\" \n" +
" \t\t xsi:schemaLocation=\"http://www.itcast.cn/xml student.xsd\"\n" +
" \t\t >\n" +
" \t<student number=\"xml_0001\">\n" +
" \t\t<name>tom</name>\n" +
" \t\t<age>18</age>\n" +
" \t\t<sex>male</sex>\n" +
" \t</student>\n" +
"\t<student number=\"xml_0002\">\n" +
" \t\t<name>mark</name>\n" +
" \t\t<age>18</age>\n" +
" \t\t<sex>female</sex>\n" +
" \t</student>\n" +
"\t\t \n" +
" </students>";
Document document = Jsoup.parse(str);
System.out.println(document);

//parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML和xml的文档对象
//代表网络中的资源路径
URL url = new URL("http://oldaz.top/");
Document document1 = Jsoup.parse(url, 10000);
System.out.println(document1);
}
}

Document对象

文本对象,代表内存中的dom树

功能:获取Element对象

getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
                     根据对应的属性名和属性值获取元素对象集合。

案例代码

xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student number="xml_0001">
<name id ="id01">tom</name>
<age>18</age>
<sex>male</sex>
</student>
<student number="xml_0002">
<name>mark</name>
<age>18</age>
<sex>female</sex>
</student>

</students>

获取Elements对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.xml.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
/**
* @author OldAZ-PC
* Document/Element对象功能
*/
public class JsoupDemo3 {
public static void main(String[] args) throws Exception {
//1 获取student。xml的路径
String path = JsoupDemo2.class.getResource("student.xml").getPath();

//2.获取Document对象
Document document = Jsoup.parse(new File(path), "utf-8");

//3.获取元素对象
// 3.1获取所有的student对象
Elements elements = document.getElementsByTag("student");
System.out.println(elements);

System.out.println("----------getEleentsById-----------");

//3.2获取属性名为id的元素对象
Elements elements1 = document.getElementsByAttribute("id");
System.out.println(elements1);
System.out.println("--------------------");
//3.3获取number属性值为xml_0001的元素对象
Elements elements2 = document.getElementsByAttributeValue("number", "xml_0001");
System.out.println(elements2);
System.out.println("--------------------");
//3.4获取id属性值的元素对象
Element id01 = document.getElementById("id01");
System.out.println(id01);
}
}

Element对象

获取子元素对象

getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
                     根据对应的属性名和属性值获取元素对象集合。

获取属性值

String attr(String key):根据属性名称获取属性值

获取文本内容

String text():获取文本内容
String html():获取标签体的所有内容(包括子标签的字符串内容)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.xml.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;


/**
* @author OldAZ-PC
* Element对象功能
*/
public class JsoupDemo4 {
public static void main(String[] args) throws Exception {
//1 获取student。xml的路径
String path = JsoupDemo2.class.getResource("student.xml").getPath();

//2.获取Document对象
Document document = Jsoup.parse(new File(path), "utf-8");
/*
Element对象

获取子元素对象

getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
根据对应的属性名和属性值获取元素对象集合。

获取属性值
String attr(String key):根据属性名称获取属性值


获取文本内容
String text():获取文本内容
String html():获取标签体的所有内容(包括子标签的字符串内容)
*
* */

//通过document 对象获取name标签,获取所有的name标签 2个
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());

//通过Element对象获取子标签对象
System.out.println("---------------");
Element student_1 = document.getElementsByTag("student").get(0);
Elements stdent_1_name = student_1.getElementsByTag("name");
System.out.println(stdent_1_name.size());
//获取student对象的属性值
String number = student_1.attr("number");
System.out.println(number);


//获取文本内容,text只获取纯文本内容,html会获取标签
String text = stdent_1_name.text();
String html = stdent_1_name.html();
System.out.println(text);
System.out.println(html);

}
}

Node节点对象

是Document和Element的父类 
主要是包含增删改的方法
文章目录
  1. 1. 概念
  2. 2. 快速入门
    1. 2.1. 步骤
  3. 3. 对象的使用
    1. 3.1. Jsoup对象
    2. 3.2. Document对象
      1. 3.2.1. 功能:获取Element对象
      2. 3.2.2. 案例代码
    3. 3.3. Element对象
      1. 3.3.1. 获取子元素对象
      2. 3.3.2. 获取属性值
      3. 3.3.3. 获取文本内容
    4. 3.4. Node节点对象
,