zoukankan      html  css  js  c++  java
  • Jsoup

    快速入门

    • 步骤:

      1. 导入 jar 包
      2. 获取 Document对象
      3. 获取对应的标签的 Element 对象
      4. 获取数据
    • student.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <students>
        <student number="heima_0001">
            <name>zhangsan</name>
            <age>20</age>
            <sex>male</sex>
        </student>
    
        <student number="heima_0002">
            <name>lisi</name>
            <age>22</age>
            <sex>female</sex>
        </student>
    </students>
    
    • JsoupDemo1.java
    package com.my.xml.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;
    
    /**
     * Jsoup快速入门
     */
    public class JsoupDemo1 {
        public static void main(String[] args) throws IOException {
            // 1.导入jar包
            // 2.获取Document对象,根据xml文档获取
    
            // 2.1 获取xml文档的路径
            String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
            // 2.2 解析xml文档,加载文档进内存,获取 dom 树 --> Document
            Document document = Jsoup.parse(new File(path), "utf-8");
            // 3. 获取元素Element
    
            Elements elements = document.getElementsByTag("name");
    //        System.out.println(elements.size());
            // 3.1 获取第一个name的element对象
            Element element = elements.get(0);
            // 3.2 获取数据
            String name = element.text(); // 获取文本数据
            System.out.println(name); // zhangsan
        }
    }
    

    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 的文档对象
    • 示例:
    package com.my.xml.jsoup;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    
    import java.io.IOException;
    import java.net.URL;
    
    /**
     * Jsoup对象
     */
    public class JsoupDemo2 {
        public static void main(String[] args) throws IOException {
            // 1.parse(File in, String charsetName):解析 xml 或 html文件
    /*
            String path = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();
            Document document = Jsoup.parse(new File(path), "utf-8");
            System.out.println(document);
    */
    
            // 2.parse(String html)
    /*
            String str = "<?xml version="1.0" encoding="UTF-8" ?>
    " +
                    "
    " +
                    "<students>
    " +
                    "    <student number="heima_0001">
    " +
                    "        <name>zhangsan</name>
    " +
                    "        <age>20</age>
    " +
                    "        <sex>male</sex>
    " +
                    "    </student>
    " +
                    "
    " +
                    "    <student number="heima_0002">
    " +
                    "        <name>lisi</name>
    " +
                    "        <age>22</age>
    " +
                    "        <sex>female</sex>
    " +
                    "    </student>
    " +
                    "</students>
    ";
            Document document = Jsoup.parse(str);
            System.out.println(document);
    */
            // 3.parse(URL url, int timeoutMillis):通过网络路径获取指定的 html
            URL url = new URL("https://baike.baidu.com/item/jsoup");
            Document document = Jsoup.parse(url, 10000);
            System.out.println(document);
    
        }
    }
    

    Document对象

    • Document:文档对象。代表内存中的 dom 树
      • 获取Element对象
        • getElementsByTag(String tagName):根据标签名获取元素对象集合
        • getElementsByAttribute(String key):根据属性名称获取元素对象集合
        • getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
        • getElementById(String id):根据 id 属性值获取唯一的 element 对象
    • 示例:
    package com.my.xml.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;
    
    /**
     * Doucument(Element)对象
     */
    public class JsoupDemo3 {
        public static void main(String[] args) throws IOException {
            // 获取student.xml的路径
            String path = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();
            // 获取document对象
            Document document = Jsoup.parse(new File(path), "utf-8");
            // 1.获取所有 student 对象们
            Elements elements = document.getElementsByTag("student");
            System.out.println(elements);
            System.out.println("===============");
    
            // 2.获取属性名为 id 的元素对象们
            Elements elements1 = document.getElementsByAttribute("id");
            System.out.println(elements1);
            System.out.println("===============");
    
            // 3.获取属性名为number,属性值为heima_0001的元素
            Elements elements2 = document.getElementsByAttributeValue("number", "heima_0001");
            System.out.println(elements2);
            System.out.println("===============");
    
            // 4.获取id为name的对象
            Element element = document.getElementById("name");
            System.out.println(element);
        }
    }
    

    Elements对象

    • Elements:元素 Element 对象的集合。可以当作 ArrayList<Element> 来使用

    Element对象

    • Element:元素对象
      1. 获取子元素对象

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

        • String attr(String attributeKey):根据属性名称获取属性值
      3. 获取文本内容

        • String text():获取所有子标签的纯文本内容
        • String html():获取标签体的所有内容(包括子标签标签和文本内容)

    Node对象

    • Node:节点对象
      • 是 Document 和 Element 的父类

    快捷查询方式

    1. selector:选择器

      • 使用的方法:Elements select(String cssQuery)
        • 语法:参考 Selector 类中定义的语法
    2. XPath:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。

      • 使用 Jsoup 的Xpath 需要额外导入 jar 包
      • 查询 W3cshool 参考手册,使用XPath的语法完成查询
      • 示例:
    package com.my.xml.jsoup;
    
    import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
    import cn.wanghaomiao.xpath.model.JXDocument;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * 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> jxNodes1 = jxDocument.selN("//student/name");
            for (JXNode jxNode : jxNodes1) {
                System.out.println(jxNode);
            }
            System.out.println("--------------");
    
            // 4.3 查询所有student标签下带有id属性值的name标签
            List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");
            for (JXNode jxNode : jxNodes2) {
                System.out.println(jxNode);
            }
            System.out.println("--------------");
    
            // 4.4 查询所有student标签下带有id属性值的name标签,并且id属性值为 itcast
            List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='itcast']");
            for (JXNode jxNode : jxNodes3) {
                System.out.println(jxNode);
            }
        }
    }
    
  • 相关阅读:
    一句SQL查询没门课程都低于80分的学生信息
    ★查询给定字符串中,出现最多的字符和出现的次数
    Eclipse自动加载源码----Attach Java Source
    Eclipse 修改workspace默认的字符集为 utf-8
    浅谈 Spring的AOP的实现 -- 动态代理
    浅谈高并发的理解
    为什么使用单例模式?
    正排索引 与 倒排索引
    图片裁剪
    微信小程序开发笔记
  • 原文地址:https://www.cnblogs.com/rainszj/p/12188868.html
Copyright © 2011-2022 走看看