xml解析之Jsoup器

Jsoup介绍

Jsoup使用

导包

平时代码例子

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

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

快捷查询

selector选择器 

查询所有年龄

获取id为p2的人的名字

xpath

概念

使用

语法

获取所有人的名字

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


 

Jsoup介绍

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

Jsoup使用

导包

xml解析之Jsoup器_第1张图片

xml解析之Jsoup器_第2张图片

平时代码例子

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

xml解析之Jsoup器_第3张图片




    
        马对钱无趣
        56
        
            

这是p标签

刘不知妻美 54 null

 

 获取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());


    }
}

运行输出

 
  
 
   马对钱无趣
 
 
 
   56
 
 
 

这是p标签

 
  
  
 
   刘不知妻美
 
 
 
   54
 
 
  null 
 
 

---------------------
马对钱无趣 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标签

可见html和text是有区别的

快捷查询

selector选择器 

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

     

查询所有年龄

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器_第5张图片

xml解析之Jsoup器_第6张图片

语法

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

xml解析之Jsoup器_第7张图片

xml解析之Jsoup器_第8张图片

xml解析之Jsoup器_第9张图片

获取所有人的名字

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 jxNodes = jxDocument.selN("//name");
        System.out.println(jxNodes);
        System.out.println("----------------------------");
        jxNodes.forEach(s-> System.out.println(s.getElement().text()));

    }
}

运行输出:

[
 马对钱无趣
,
 刘不知妻美
]
----------------------------
马对钱无趣
刘不知妻美

获取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 jxNodes1 = jxDocument.selN("//Programmer");
        System.out.println(jxNodes1);
        System.out.println("-------------------------------");
        List jxNodes2 = jxDocument.selN("//programmer[@id='p1']/code");
        System.out.println(jxNodes2.get(0).getElement().text());

    }
}

 运行输出:

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

你可能感兴趣的:(xml,xml,解析,jsoup)