随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、Jsoup 解析步骤

Jsoup 中文帮助 API:https://www.open-open.com/jsoup/

步骤:

1、导入 jar 包(官网下载地址:Jsoup 官网

2、解析 XML 文件

  ① 得到解析文件的路径:类加载器加载文件的路径

  ② 构建一个 File 对象

  ③ 调用 Jsoup 的 parse 方法解析 XML 文件得到一个 Document 对象

  ④ 调用 Document 的相关方法得到相关的标签对象(Element),Element 就是一个存放了 Element 对象的 ArrayList 集合

  ⑤ 调用 Element 的相关方法获取数据

XML 文件:

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

<students>
    <student number="0001">
        <name id="java">tom</name>
        <age>18</age>
        <sex>male</sex>
    </student>
    <student number="0002">
        <name>jack</name>
        <age>18</age>
        <sex>female</sex>
    </student>
</students>

解析 XML:

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

/**
 * xml_解析_Jsoup_快速入门
 * <p>
 * 步骤:
 * 1,导入JAR
 * 2,解析XML文件
 *      A,得到解析文件的路径:类加载器加载文件的路径
 *      B,构建一个FILE对象
 *      C,调用JSOUP的PARSE方法解析XML文件得到一个DOCUMENT对象
 *      D,调用Document的相关方法得到相关的标签对象(Element)
 *          Elements:就是一个存了Element对象的ArrayList集合
 *      E ,调用Element的相关方法得到想要的数据
 */
public class JsoupDemo1 {
    public static void main(String[] args) throws IOException {
        //1.获取xml解析文件的路径
        String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
        //2.解析xml文档,加载文档进内存,获取 dom 树 --》获取document对象
        Document document = Jsoup.parse(new File( path ),"UTF-8");
        //3.获取元素对象Element,返回值是存了Element对象的ArrayList集合
        Elements name = document.getElementsByTag( "name" );
     System.out.println(name.size());
        //4.获取第一个name的Element对象
        Element element = name.get( 0 );
        //5.获取数据
        String text = element.text();
        System.out.println(text);
    }
}

二、Jsoup 对象的使用

1、Jsoup 类

Jsoup:工具类,可以解析 HTML 或 XML 文档,返回 Document 对象

parse:解析 html 或 xml 文档,返回 Document
parse​(File in, String charsetName):解析 xml 或 html 文件的。
parse​(String html):解析 xml 或 html 字符串
parse​(URL url, int timeoutMillis):通过网络路径获取指定的 html 或 xml 的文档对象

Demo:

package jsoup;
/**
 * Jsoup对象功能
 */

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

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class JsoupDemo2 {
    public static void main(String[] args) throws IOException {
        //获取xml解析文件的路径
        String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml" ).getPath();

        //1.解析xml文档,加载文档进内存,获取document对象
        Document document = Jsoup.parse(new File( path ),"UTF-8");

        //2.parse(String html):解析xml或HTML字符串
        String str="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
                "\n" +
                "<students>\n" +
                "\t<student number=\"0001\">\n" +
                "\t\t<name>tom</name>\n" +
                "\t\t<age>18</age>\n" +
                "\t\t<sex>male</sex>\n" +
                "\t</student>\n" +
                "\t<student number=\"0002\">\n" +
                "\t\t<name>jack</name>\n" +
                "\t\t<age>18</age>\n" +
                "\t\t<sex>female</sex>\n" +
                "\t</student>\n" +
                "</students>";
        Document document1 = Jsoup.parse( str );
//        System.out.println(document1);

        //3.parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML或xml文档对象
        URL url=new URL("https:www.baidu.com");
        Document document2 = Jsoup.parse( url,10000);
//        System.out.println(document2);


    }
}

2、Document 对象

Document 对象:文档对象,代表内存中的 dom 树

获取 Element 对象的方法:

getElementById​(String id):根据 id 属性值获取唯一的 element 对象
getElementsByTag​(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute​(String key):根据属性名称获取元素对象集合
getElementsByAttributeValue​(String keyString value):根据对应的属性名和属性值获取元素对象集合

Demo:

package com.ks.jsoup;

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

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

/**
 *Document/Elements对象
 */
public class JsoupDomo3 {
    public static void main(String[] args) throws IOException {
        String path = JsoupDomo3.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
        Document document = Jsoup.parse( new File( path ), "UTF-8" );

        //1.获取所有的student对象
        Elements student = document.getElementsByTag( "student" );
        System.out.println(student);
        System.out.println("========================");

        //2.获取id属性的元素对象
        Elements id = document.getElementsByAttribute( "id" );
        System.out.println(id);
        System.out.println("========================");

        //3.根据id属性值获取唯一的element对象
        Elements value = document.getElementsByAttributeValue( "id""itcast" );
        System.out.println(value);
    }
}

3、Elements

Elements:元素 Element 对象的集合,可以当做 ArrayList 来使用

4、Element 对象

Element 表示元素对象

(1)获取子元素对象的方法

getElementById​(String id):根据 id 属性值获取唯一的 element 对象
getElementsByTag​(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute​(String key):根据属性名称获取元素对象集合
getElementsByAttributeValue​(String keyString value):根据对应的属性名和属性值获取元素对象集合

(2)获取属性值的方法

String attr(String key):根据属性名称获取属性值

(3)获取文本内容

String text():获取所有子标签的纯文本内容
String html():获取标签体的所有内容(包括子标签和标签里面的内容的字符串内容)

Demo:

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

/**
 * Element对象
 */
public class JsoupDemo4 {
    public static void main(String[] args) throws IOException {
        String path = JsoupDemo4.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
        Document document = Jsoup.parse( new File( path ), "UTF-8" );

        //通过document获取所有的name标签,可以获取两个
        Elements name = document.getElementsByTag( "name" );
        System.out.println(name.size());

        //通过element对象子标签对象,可以获取一个
        Element ele_Student = document.getElementsByTag( "name" ).get( 0 );
        Elements els_name = ele_Student.getElementsByTag( "name" );
        System.out.println(els_name.size());

        //获取student对象的属性值
        String number = ele_Student.attr( "number" );
        System.out.println(number.length());
        //获取文本内容
        String text = els_name.text();
        String html = els_name.html();
        System.out.println(text);
        System.out.println(html);
    }
}  

5、Node 对象

Node 表示节点对象,是 Document 和 Element 的父类

三、Jsoup 快捷查询方式

1、selector 选择器

使用的方法:Elements

Elements select​(String cssQuery)

详细语法,参考 JavaAPI 中 Selector 类中定义的语法。

Demo:

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;

/**
 *选择器查询
 */
public class JsoupDemo {
    public static void main(String[] args) throws IOException {
        //1.获取student.xml的path
        String path = JsoupDemo5.class.getClassLoader().getResource("student.xml").getPath();
        //2.获取Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");

        //3.查询name标签

        Elements elements = document.select("name");
        System.out.println(elements);
        System.out.println("=----------------");
        //4.查询id值为java的元素
        Elements elements1 = document.select("#java");
        System.out.println(elements1);
        System.out.println("----------------");
        //5.获取student标签并且number属性值为java_0001的age子标签
        //5.1.获取student标签并且number属性值为java_0001
        Elements elements2 = document.select("student[number=\"java_0001\"]");
        System.out.println(elements2);
        System.out.println("----------------");

        //5.2获取student标签并且number属性值为java_0001的age子标签
        Elements elements3 = document.select("student[number=\"java_0001\"] > age");
        System.out.println(elements3);

    }

} 

2、XPath

XPath 即为 xml 路径语言,它是一种用来确定 xml(标准通用标记语言的子级)文档中某部分位置的语言

使用步骤:

(1)使用 Jsoup 的 Xpath 需要额外导入 jar 包。

(2)使用 Xpath 语法完成查询。XPath 语法

Demo:

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 org.jsoup.select.Elements;
import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 *XPath查询
 */
public class JsoupDemo6 {
    public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
        //1.获取student.xml的path
        String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
        //2.获取Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");

        //3.根据document对象,创建JXDocument对象
        JXDocument jxDocument = new JXDocument(document);

        //4.结合xpath语法查询
        //4.1查询所有student标签
        List<JXNode> jxNodes = jxDocument.selN("//student");
        for (JXNode jxNode : jxNodes) {
            System.out.println(jxNode);
        }

        System.out.println("--------------------");

        //4.2查询所有student标签下的name标签
        List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
        for (JXNode jxNode : jxNodes2) {
            System.out.println(jxNode);
        }

        System.out.println("--------------------");

        //4.3查询student标签下带有id属性的name标签
        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
        for (JXNode jxNode : jxNodes3) {
            System.out.println(jxNode);
        }
        System.out.println("--------------------");
        //4.4查询student标签下带有id属性的name标签 并且id属性值为java

        List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='java']");
        for (JXNode jxNode : jxNodes4) {
            System.out.println(jxNode);
        }
    }

}
posted on   格物致知_Tony  阅读(286)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
点击右上角即可分享
微信分享提示

目录导航