美文网首页
HTML&XML解析器--Jsoup

HTML&XML解析器--Jsoup

作者: 张氏小毛驴 | 来源:发表于2022-04-04 21:06 被阅读0次

    HTML&XML解析器

    一.Jsoup概述

    1. Jsoup简介

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

      同样,Jsoup能解析HTML,也可以解析XML

    2. Jsoup主要功能

      • 从一个URL,文件或字符串中解析HTML(XML)
      • 使用DOM或CSS的选择器来查找和取出数据
      • 可以操作HTML/XML的元素,属性和文本
    3. Jsoup主要类

      • Jsoup:工具类,可以解析html或xml文档,返回一个Document
      • Document:文档对象,代表内存中的DOM树
      • Element:元素对象
      • Elements:元素对象Element的集合,可以当做ArrayList<Element>来使用
      • Node:节点对象,是Document和Element的父类

    二.Jsoup的应用

    1. 快速入门步骤

      • 导入相关的jar包
      • 获取Document对象
      • 获取对应标签的Element对象
      • 获取数据

      XML文件student.xml

      <students>
          <student number="0001">
              <name id="itcast">
                  <xing>张</xing>
                  <ming>三</ming>
              </name>
              <age>18</age>
              <sex>male</sex>
          </student>
          <student number="0002">
              <name>jack</name>
              <age>18</age>
              <sex>female</sex>
          </student>
      
      </students>
      
    package com.zzy.www.JsoupTest;
    
    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 JsoupDemo1 {
        public static void main(String[] args) throws IOException {
            String xmlPath = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
            // 获取Document对象
            Document document = Jsoup.parse(new File(xmlPath), "utf-8");
    
            // 获取对应标签的Element对象 获取name标签
            Elements ele = document.getElementsByTag("name");
    
    //        System.out.println(ele);
    
            // 获取第一个name的Element对象
            Element e1 = ele.get(0);
            System.out.println(e1);
        }
    }
    
    1. 相关对象的API使用介绍

      • Jsoup

        Jsoup类是任何Jsoup程序的入口点,并且提供了从各种来源加载和解析HTML/XML文档的方法。

        主要方法有如下:

        • static Connection connect(String url):创建并返回URL的连接
        • static Document parse(File in, String charsetName):将制定的字符集文件解析成文档
        • static Document parse(String html):将给定的html代码解析成文档
        • static String clean(String bodyHtml,Whitelist whitelist):从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。
      • Document

        Document代表了内存中的dom树。

        主要方法有:

        • Element getElementById(String id):根据id属性值获取唯一的element对象
        • Elements getElementByTag(String tagName):根据标签名获取元素对象的集合
        • Elements getElementByAttribute(String key):根据属性名称获取元素对象集合
        • Elements getElementByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
        public class JsoupDemo2 {
            public static void main(String[] args) throws IOException {
                String xmlPath = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();
        
                // 获取Document对象
                Document doc = Jsoup.parse(new File(xmlPath), "utf-8");
        
                // 根据ID值获取Element对象
                Element eleId = doc.getElementById("itcast");
                System.out.println(eleId);
                System.out.println("=================");
        
                // 获取所有的student对象
                // 通过标签名获取
                Elements eleStudents = doc.getElementsByTag("student");
                System.out.println(eleStudents);
                System.out.println("---------------------");
        
                // 获取属性名为id的元素对象
                Elements eleAttrId = doc.getElementsByAttribute("id");
                System.out.println(eleAttrId);
                System.out.println("+++++++++++++++++++++");
        
                // 获取属性名为number,属性值为0002的元素对象
                Elements ele = doc.getElementsByAttributeValue("number", "0002");
                System.out.println(ele);
            }
        }
        
    • Elements

      Element对象的集合,当做ArrayList<Element>处理

    • Element

      Element代表了元素对象

      主要有以下几类方法:

      1. 获取子元素对象
        • Element getElementById(String id):根据id属性值获取唯一的element对象
        • Elements getElementByTag(String tagName):根据标签名获取元素对象的集合
        • Elements getElementByAttribute(String key):根据属性名称获取元素对象集合
        • Elements getElementByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
      2. 获取属性值
        • String attr(String key):根据属性名称获取属性值
      3. 获取文本内容
        • String text():获取文本内容
        • String html():获取标签体的所有内容(包括子标签的字符串内容)
      public class JsoupDemo3 {
          public static void main(String[] args) throws IOException {
              String xmlPath = JsoupDemo1.JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();
      
              // 获取Document对象
              Document doc = Jsoup.parse(new File(xmlPath), "utf-8");
      
      
              // 先获取Element元素对象
              Elements eles = doc.getElementsByTag("student");
              Element ele = eles.get(0);
      
              // 获取Element元素的属性值
              String attr = ele.attr("number");
              System.out.println(attr);   // 输出:0001
              System.out.println("--------------");
      
              // 获取元素的子元素对象
              Elements ele1 = ele.getElementsByTag("name");
              System.out.println(ele1);
      
              // 获取文本内容
              String txt = ele1.text();
              System.out.println(txt); // 输出:张 三
              System.out.println("===============");
      
              String html = ele1.html();
              System.out.println(html);
              // 输出:
      //            <xing>
      //                张 
      //                </xing> 
      //            <ming>
      //                三 
      //                </ming>
          }
      }
      
    • 还可以使用快捷查询方式,使用选择器Selector

      public class JsoupDemo4 {
          public static void main(String[] args) throws IOException {
              String xmlPath = JsoupDemo4.class.getClassLoader().getResource("student.xml").getPath();
      
              Document doc = Jsoup.parse(new File(xmlPath), "utf-8");
      
              // 通过标签名查找
              Elements eles = doc.select("name");
              System.out.println(eles);
              System.out.println("----------------");
      
              // 通过id值查找
              Elements eles1 = doc.select("#itcast");
              System.out.println(eles1);
              System.out.println("================");
      
              // 通过属性值查找 number=0002
              Elements eles2 = doc.select("[number='0002']");
              System.out.println(eles2);
          }
      }
      
    1. 学习链接

      https://blog.csdn.net/weixin_34129696/article/details/91885803

    相关文章

      网友评论

          本文标题:HTML&XML解析器--Jsoup

          本文链接:https://www.haomeiwen.com/subject/viqsjrtx.html