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);
            }
        }
    }
    
  • 相关阅读:
    angularjs的$on、$emit、$broadcast
    angularjs中的路由介绍详解 ui-route(转)
    ionic入门教程-ionic路由详解(state、route、resolve)(转)
    Cocos Creator 加载使用protobuf第三方库,因为加载顺序报错
    Cocos Creator 计时器错误 cc.Scheduler: Illegal target which doesn't have uuid or instanceId.
    Cocos Creator 构造函数传参警告 Can not instantiate CCClass 'Test' with arguments.
    Cocos Creator 对象池NodePool
    Cocos Creator 坐标系 (convertToWorldSpaceAR、convertToNodeSpaceAR)
    Cocos Creator 常驻节点addPersistRootNode
    Cocos Creator 配合Tiled地图的使用
  • 原文地址:https://www.cnblogs.com/rainszj/p/12188868.html
Copyright © 2011-2022 走看看