本教程仅限于 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文件,获得 driverClassjdbcUrluserpassword

<?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&amp;characterEncoding=utf8&amp;useSSL=false&amp;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/
版权声明:本文为博主原创文章,转载请注明原文链接作者信息