使用Jsoup解析XML文档
本教程仅限于
jsoupv1.11.3
+jsoupXPathv0.3.2
+jdk1.8
一、在pom.xml中添加jsoup和jsoupXPath依赖
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.wanghaomiao/JsoupXpath -->
<dependency>
<groupId>cn.wanghaomiao</groupId>
<artifactId>JsoupXpath</artifactId>
<version>0.3.2</version>
</dependency>
二、Jsoup概述
- 概述:Jsoup是一个专门用于解析HTML文档的技术,但是它太好用了,所以也被用来解析同为标记语言的xml文档
- 常用对象:
Jsoup
Document
Elements
Element
Node
1. Jsoup对象
- parse(File in,String charsetName):读取文档,创建Document对象
- parse(String html):解析文档字符串创建Document对象
- parse(URL url,int timeoutMillis):通过URL读取网页源码创建Document对象
2. Document对象
- getElementsByTag(String tagName):根据标签名称获取标签元素集合Elements对象
- getElementsByAttribute(String key):根据指定属性获取含有该属性的标签元素集合Elements对象
- getElementsByAttributeValue(String key,String value):根据指定属性和属性值获取含有该属性对的标签元素集合Elements对象
- getElementsById(String id):根据指定id值获取含有该id属性值的标签元素集合Elements对象
3. Elements对象
- 继承自ArrayList<Element>,用于存放标签元素的集合,同ArrayList使用方式一样
4. Element对象
获取子元素的方法同Document
- getElementsByTag(String tagName):根据标签名称获取标签元素集合Elements对象
- getElementsByAttribute(String key):根据指定属性获取含有该属性的标签元素集合Elements对象
- getElementsByAttributeValue(String key,String value):根据指定属性和属性值获取含有该属性对的标签元素集合Elements对象
- getElementsById(String id):根据指定id值获取含有该id属性值的标签元素集合Elements对象
获取属性值的方法
- String attr(String key):根据属性名称获取属性值
获取文本内容
- String text():获取文本内容
- String html():获取标签内所有内容
三、书写代码,实现解析 c3p0-config.xml
目标:解析xml文件,获得
driverClass
,jdbcUrl
,user
,password
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<!--使用默认的配置读取连接池对象-->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test?useUnicode=ture&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong</property>
<property name="user">root</property>
<property name="password">123456</property>
<!-- 初始化连接数 -->
<property name="initialPoolSize">10</property>
<!-- 最大空闲时间 -->
<property name="maxIdleTime">30</property>
<!-- 最大连接数 -->
<property name="maxPoolSize">100</property>
<!-- 最小连接数 -->
<property name="minPoolSize">10</property>
<!-- 超时时间 -->
<property name="checkoutTimeout">3000</property>
<property name="acquireRetryAttempts">30</property>
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">0</property>
</default-config>
</c3p0-config>
1. getElementsByTag(String tagName)方法
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String path = URLDecoder.decode(JsoupDemo.class.getClassLoader().getResource("c3p0-config.xml").getPath());
Document document = Jsoup.parse(new File(path), "utf-8");
Elements propertys = document.getElementsByTag("property");
for (Element property : propertys) {
System.out.println(property.text());
}
}
}
//控制台打印结果
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/test?useUnicode=ture&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
root
123456
10
30
100
10
3000
30
0
0
2. getElementsByAttribute(String key)方法
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String path = URLDecoder.decode(JsoupDemo.class.getClassLoader().getResource("c3p0-config.xml").getPath());
Document document = Jsoup.parse(new File(path), "utf-8");
Elements names = document.getElementsByAttribute("name");
for (Element name : names) {
System.out.println(name.text());
}
}
}
//控制台打印结果
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/test?useUnicode=ture&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
root
123456
10
30
100
10
3000
30
0
0
3. getElementsByAttributeValue(String key,String value)方法
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String path = URLDecoder.decode(JsoupDemo.class.getClassLoader().getResource("c3p0-config.xml").getPath());
Document document = Jsoup.parse(new File(path), "utf-8");
Elements driverClass = document.getElementsByAttributeValue("name", "driverClass");
for (Element aClass : driverClass) {
System.out.println(aClass.text());
}
Elements jdbcUrl = document.getElementsByAttributeValue("name", "jdbcUrl");
for (Element element : jdbcUrl) {
System.out.println(element.text());
}
Elements user = document.getElementsByAttributeValue("name", "user");
for (Element element : user) {
System.out.println(element.text());
}
Elements password = document.getElementsByAttributeValue("name", "password");
for (Element element : password) {
System.out.println(element.text());
}
}
}
//控制台打印结果
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/test?useUnicode=ture&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
root
123456
4. getElementsById(String id)方法
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String path = URLDecoder.decode(JsoupDemo.class.getClassLoader().getResource("c3p0-config.xml").getPath(), "UTF-8");
Document document = Jsoup.parse(new File(path), "UTF-8");
Element idname = document.getElementById("idname");
System.out.println(idname);
}
}
//控制台打印结果
null
//因为c3p0-config.xml文件中并没有含有id的标签
四、书写代码,使用Jsoup的扩展功能解析xml文件
1. 第一步:读取xml文件获取Document对象
String url = URLDecoder.decode(JsoupDemo.class.getClassLoader().getResource("c3p0-config.xml").getPath(),"UTF-8");
Document parse = Jsoup.parse(new File(url), "UTF-8");
2. 第二步:使用Document对象的select方法
- 概述:select方法支持所有基本的CSS选择器语法,我们可以通过传入指定选择器来获取指定Element对象
//标签选择器
Elements es = parse.select("property");
//属性选择器
Elements es = parse.select("property[name=jdbcUrl]");
//组合选择器
Elements es = parse.select("default-config > property[name=jdbcUrl]");
//ID选择器
Element e = parse.select("#id");
//Class选择器
Elements es = parse.select(".class");
其他选择器就不演示了,大家自己研究
3. 第三步:完整代码
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String url = URLDecoder.decode(JsoupDemo.class.getClassLoader().getResource("c3p0-config.xml").getPath(),"UTF-8");
Document parse = Jsoup.parse(new File(url), "UTF-8");
Elements e1 = parse.select("property[name=driverClass]");
for (Element element : e1) {
System.out.println(element.text());
}
Elements e2 = parse.select("property[name=jdbcUrl]");
for (Element element : e2) {
System.out.println(element.text());
}
Elements e3 = parse.select("property[name=user]");
for (Element element : e3) {
System.out.println(element.text());
}
Elements e4 = parse.select("property[name=password]");
for (Element element : e4) {
System.out.println(element.text());
}
Elements e5 = parse.select("default-config > property[name=driverClass]");
for (Element element : e5) {
System.out.println(element.text());
}
Elements e6 = parse.select("default-config > property[name=jdbcUrl]");
for (Element element : e6) {
System.out.println(element.text());
}
Elements e7 = parse.select("default-config > property[name=user]");
for (Element element : e7) {
System.out.println(element.text());
}
Elements e8 = parse.select("default-config > property[name=password]");
for (Element element : e8) {
System.out.println(element.text());
}
}
}
//控制台输出结果
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/test?useUnicode=ture&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
root
123456
com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/test?useUnicode=ture&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
root
123456
原文作者:絷缘
作者邮箱:zhiyuanworkemail@163.com
原文地址:https://zhiyuandnc.github.io/rSoFG8-KT/
版权声明:本文为博主原创文章,转载请注明原文链接作者信息