当前位置: 移动技术网 > IT编程>开发语言>Java > xml解析之Jsoup器

xml解析之Jsoup器

2020年07月03日  | 移动技术网IT编程  | 我要评论

Jsoup介绍

Jsoup使用

导包

平时代码例子

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

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

快捷查询

selector选择器 

查询所有年龄

获取id为p2的人的名字

xpath

概念

使用

语法

获取所有人的名字

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


 

Jsoup介绍

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

Jsoup使用

导包

平时代码例子

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

<?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类中定义的语法
  •  

查询所有年龄

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包

语法

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

获取所有人的名字

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标签

本文地址:https://blog.csdn.net/lgl782519197/article/details/107081415

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网