XML解析工具jsoup的基本使用

1、导包

官网地址:https://jsoup.org/ 这里可以找到jar包的下载链接;

2、简要说明

  • 按照官网的介绍,jsoup是一个用于解析HTML的Java库,XML相对于HTML来讲更为严格肯定也是没有问题的;
  • jsoup以文件、字节流或URL等各种方式将HTML/XML文件转换为一个Document对象;
  • 这个Document对象和HTML中的Document对象极为类型,甚至很多方法都完全相同,可以简单地理解为DOM树的Java实现;
  • DOM操作中比较重要的一个环节就是子元素的获取
    • Element:Document继承自Element,即继承了Element获取子元素的各种方法
    • Selector:jsoup中自带的选择器类,相当于H5的selector
    • JsoupXpath:支持XPath语法的解析器

3、相关示例

3.0、XML文件

<?xml version="1.0" ?>
<students>
    <student>
        <name number="s01">张三</name>
        <age>19</age>
        <gender>男</gender>
    </student>
    <student>
        <name number="s02">李四</name>
        <age>18</age>
        <gender>女</gender>
    </student>
</students>

3.1、Element方法获取子节点

private static void demo01() throws IOException {
    // 通过类加载器定位获取xml文件路径
    ClassLoader loader = JsoupDemo.class.getClassLoader();
    URL url = loader.getResource("students.xml");
    // 这个Document对象和web中的Document对象极其地类似
    Document document = Jsoup.parse(new File(url.getPath()), "utf-8");
    // System.out.println(document);
    Elements elements = document.getElementsByTag("name");
    for (Element element : elements) {
        System.out.println(element.text());
    }
}

3.2、Selector获取子元素

private static void demo03() throws IOException {
    // 通过类加载器定位获取xml文件位置
    ClassLoader loader = JsoupDemo.class.getClassLoader();
    String path = loader.getResource("students.xml").getPath();
    // 获取Document对象,也可以说是根节点元素
    Document doc = Jsoup.parse(new File(path), "utf-8");
    // 支持id选择器标识'#',类选择器标识'.',标签选择器及属性选择器等
    Elements element = doc.select("name[number=s01]");
    System.out.println(element);
}

输出结果:

<name number="s01">
 张三
</name>

3.3、JsoupXpath

  • github地址:https://github.com/zhegexiaohuozi/JsoupXpath
  • 根据官方的说法,JsoupXpath语法解析处理采用Antlr4进行了重构,因此使用时还需要添加其他额外的依赖包
    • antlr4-runtime-4.7.2.jar
    • slf4j-api-1.7.25.jar
    • commons-lang3-3.3.2.jar
  • JsoupXpath有自己的Document对象JXDocument与Node对象JXNode
public class JsoupXpathDemo {
    public static void main(String[] args) throws IOException {
        // 获取Document对象
        ClassLoader loader = JsoupXpathDemo.class.getClassLoader();
        String path = loader.getResource("students.xml").getPath();
        Document doc = Jsoup.parse(new File(path), "utf-8");
        // 通过Document对象初始化JXDocument对象
        JXDocument jxDoc = JXDocument.create(doc);
        // 使用Xpath语法进行子元素选择
        JXNode node = jxDoc.selNOne("//name[@number='s01']");
        // 对象之间相互转换,类比jQuery对象与DOM对象之间的关系
        Element element = node.asElement();
        System.out.println(element);
        System.out.println(node);
    }
}

运行结果:

<name number="s01">
 张三
</name>
<name number="s01">
 张三
</name>

Leave a Reply