欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

xml解析之Jsoup器

程序员文章站 2022-06-16 15:44:56
...

Jsoup介绍

Jsoup使用

导包

平时代码例子

 获取programmers标签所有数据,以及其文本

获取id为p1的程序员的代码

快捷查询

selector选择器 

查询所有年龄

获取id为p2的人的名字

xpath

概念

使用

语法

获取所有人的名字

获取id为p1的程序员的代码


 

Jsoup介绍

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

Jsoup使用

导包

xml解析之Jsoup器

xml解析之Jsoup器

平时代码例子

新建一个xml文件。我放在src目录下

xml解析之Jsoup器

<?xml version="1.0" encoding="UTF-8" ?>

<Programmers>
    <Programmer id="p1">
        <name>马对钱无趣</name>
        <age>56</age>
        <code>
            <p>这是p标签</p>
        </code>
    </Programmer>
    <Programmer id="p2">
        <name>刘不知妻美</name>
        <age>54</age>
        <code>null</code>
    </Programmer>
</Programmers>

 

 获取programmers标签所有数据,以及其文本

JsoupDemo1代码

package com.jsoup;

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

import java.io.*;

/**
 * @author 林高禄
 * @create 2020-07-02-11:57
 */
public class JsoupDemo1 {
    public static void main(String[] args) throws IOException {
        String path = JsoupDemo1.class.getClassLoader().getResource("jsoupTest.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        Elements elements = document.getElementsByTag("Programmers");
        System.out.println(elements);
        System.out.println("---------------------");
        // 遍历获取文本
        elements.forEach(s-> System.out.println(s.text()));
        System.out.println("---------------------");
        // 直接获取文本,内部自动遍历
        System.out.println(elements.text());


    }
}

运行输出

<programmers> 
 <programmer id="p1"> 
  <name>
   马对钱无趣
  </name> 
  <age>
   56
  </age> 
  <code> <p>这是p标签</p> </code> 
 </programmer> 
 <programmer id="p2"> 
  <name>
   刘不知妻美
  </name> 
  <age>
   54
  </age> 
  <code>null</code> 
 </programmer> 
</programmers>
---------------------
马对钱无趣 56 这是p标签 刘不知妻美 54 null
---------------------
马对钱无趣 56 这是p标签 刘不知妻美 54 null

获取id为p1的程序员的代码

package com.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.io.IOException;

/**
 * @author 林高禄
 * @create 2020-07-02-11:57
 */
public class JsoupDemo2 {
    public static void main(String[] args) throws IOException {
        String path = JsoupDemo2.class.getClassLoader().getResource("jsoupTest.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        Element p2 =document.getElementById("p1");
        Elements code = p2.getElementsByTag("code");
        // 标签下的所有内容
        System.out.println(code.get(0).html());
        System.out.println("------------------------------");
        // 标签下的文本
        System.out.println(code.get(0).text());


    }
}

运行输出:

<p>这是p标签</p>
------------------------------
这是p标签

可见html和text是有区别的

快捷查询

selector选择器 

  • 使用方法:Elements select(String cssQuery),cssQuery类似CSS中标签、id、类选择器等
  • 语法:参考selector类中定义的语法
  • xml解析之Jsoup器

     

查询所有年龄

package com.jsoup;

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

import java.io.File;
import java.io.IOException;

/**
 * @author 林高禄
 * @create 2020-07-02-11:57
 */
public class JsoupDemo3 {
    public static void main(String[] args) throws IOException {
        String path = JsoupDemo3.class.getClassLoader().getResource("jsoupTest.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 查询age标签
        Elements age = document.select("age");
        System.out.println(age.text());

    }
}

运行输出:

56 54

获取id为p2的人的名字

package com.jsoup;

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

import java.io.File;
import java.io.IOException;

/**
 * @author 林高禄
 * @create 2020-07-02-11:57
 */
public class JsoupDemo4 {
    public static void main(String[] args) throws IOException {
        String path = JsoupDemo4.class.getClassLoader().getResource("jsoupTest.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 获取id为p2的人的名字,Programmer[id="p2"]标识id为p2的Programmer,> name为直接子name标签
        Elements select = document.select("Programmer[id=\"p2\"] > name");
        System.out.println(select.text());

    }
}

 运行输出:

刘不知妻美

xpath

概念

百度百科:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

使用

xpath是独立的,所以Jsoup要使用xpath,得导入相关的jar包

xml解析之Jsoup器

xml解析之Jsoup器

语法

xpath的语法,打开W3school,找到xpath

xml解析之Jsoup器

xml解析之Jsoup器

xml解析之Jsoup器

获取所有人的名字

package com.jsoup;

import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
import cn.wanghaomiao.xpath.model.JXDocument;
import cn.wanghaomiao.xpath.model.JXNode;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @author 林高禄
 * @create 2020-07-02-11:57
 */
public class JsoupDemo5 {
    public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
        String path = JsoupDemo5.class.getClassLoader().getResource("jsoupTest.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 获取xpath的相关对象
        JXDocument jxDocument = new JXDocument(document);
        // 获取所有人名字
        List<JXNode> jxNodes = jxDocument.selN("//name");
        System.out.println(jxNodes);
        System.out.println("----------------------------");
        jxNodes.forEach(s-> System.out.println(s.getElement().text()));

    }
}

运行输出:

[<name>
 马对钱无趣
</name>, <name>
 刘不知妻美
</name>]
----------------------------
马对钱无趣
刘不知妻美

获取id为p1的程序员的代码

package com.jsoup;

import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
import cn.wanghaomiao.xpath.model.JXDocument;
import cn.wanghaomiao.xpath.model.JXNode;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @author 林高禄
 * @create 2020-07-02-11:57
 */
public class JsoupDemo6 {
    public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
        String path = JsoupDemo6.class.getClassLoader().getResource("jsoupTest.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 获取xpath的相关对象
        JXDocument jxDocument = new JXDocument(document);
        // 获取id为p1的程序员的代码
        // 虽然在xml中是Programmer,但是这里要写programmer,要小写,不然查不到
        List<JXNode> jxNodes1 = jxDocument.selN("//Programmer");
        System.out.println(jxNodes1);
        System.out.println("-------------------------------");
        List<JXNode> jxNodes2 = jxDocument.selN("//programmer[@id='p1']/code");
        System.out.println(jxNodes2.get(0).getElement().text());

    }
}

 运行输出:

[]
-------------------------------
这是p标签

相关标签: xml 解析 jsoup