zoukankan      html  css  js  c++  java
  • JavaWeb 之 XML 解析器 — Jsoup

    一、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 文件:

     1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
     2  
     3 <students>
     4     <student number="0001">
     5         <name id="java">tom</name>
     6         <age>18</age>
     7         <sex>male</sex>
     8     </student>
     9     <student number="0002">
    10         <name>jack</name>
    11         <age>18</age>
    12         <sex>female</sex>
    13     </student>
    14 </students>

      解析 XML:

     1 package com.ks.jsoup;
     2  
     3 import org.jsoup.Jsoup;
     4 import org.jsoup.nodes.Document;
     5 import org.jsoup.nodes.Element;
     6 import org.jsoup.select.Elements;
     7  
     8 import java.io.File;
     9 import java.io.IOException;
    10  
    11 /**
    12  * xml_解析_Jsoup_快速入门
    13  * <p>
    14  * 步骤:
    15  * 1,导入JAR
    16  * 2,解析XML文件
    17  *      A,得到解析文件的路径:类加载器加载文件的路径
    18  *      B,构建一个FILE对象
    19  *      C,调用JSOUP的PARSE方法解析XML文件得到一个DOCUMENT对象
    20  *      D,调用Document的相关方法得到相关的标签对象(Element)
    21  *          Elements:就是一个存了Element对象的ArrayList集合
    22  *      E ,调用Element的相关方法得到想要的数据
    23  */
    24 public class JsoupDemo1 {
    25     public static void main(String[] args) throws IOException {
    26         //1.获取xml解析文件的路径
    27         String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
    28         //2.解析xml文档,加载文档进内存,获取 dom 树 --》获取document对象
    29         Document document = Jsoup.parse(new File( path ),"UTF-8");
    30         //3.获取元素对象Element,返回值是存了Element对象的ArrayList集合
    31         Elements name = document.getElementsByTag( "name" );
    32      System.out.println(name.size());
    33         //4.获取第一个name的Element对象
    34         Element element = name.get( 0 );
    35         //5.获取数据
    36         String text = element.text();
    37         System.out.println(text);
    38     }
    39 }

    二、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:

     1 package jsoup;
     2 /**
     3  * Jsoup对象功能
     4  */
     5  
     6 import org.jsoup.Jsoup;
     7 import org.jsoup.nodes.Document;
     8  
     9 import java.io.File;
    10 import java.io.IOException;
    11 import java.net.URL;
    12  
    13 public class JsoupDemo2 {
    14     public static void main(String[] args) throws IOException {
    15         //获取xml解析文件的路径
    16         String path = JsoupDemo1.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
    17  
    18         //1.解析xml文档,加载文档进内存,获取document对象
    19         Document document = Jsoup.parse(new File( path ),"UTF-8");
    20  
    21         //2.parse(String html):解析xml或HTML字符串
    22         String str="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    " +
    23                 "
    " +
    24                 "<students>
    " +
    25                 "	<student number="0001">
    " +
    26                 "		<name>tom</name>
    " +
    27                 "		<age>18</age>
    " +
    28                 "		<sex>male</sex>
    " +
    29                 "	</student>
    " +
    30                 "	<student number="0002">
    " +
    31                 "		<name>jack</name>
    " +
    32                 "		<age>18</age>
    " +
    33                 "		<sex>female</sex>
    " +
    34                 "	</student>
    " +
    35                 "</students>";
    36         Document document1 = Jsoup.parse( str );
    37 //        System.out.println(document1);
    38  
    39         //3.parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML或xml文档对象
    40         URL url=new URL("https:www.baidu.com");
    41         Document document2 = Jsoup.parse( url,10000);
    42 //        System.out.println(document2);
    43  
    44  
    45     }
    46 }
    View Code

      2、Document 对象

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

        获取 Element 对象的方法:

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

        Demo:

     1 package com.ks.jsoup;
     2 
     3 import org.jsoup.Jsoup;
     4 import org.jsoup.nodes.Document;
     5 import org.jsoup.select.Elements;
     6  
     7 import java.io.File;
     8 import java.io.IOException;
     9  
    10 /**
    11  *Document/Elements对象
    12  */
    13 public class JsoupDomo3 {
    14     public static void main(String[] args) throws IOException {
    15         String path = JsoupDomo3.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
    16         Document document = Jsoup.parse( new File( path ), "UTF-8" );
    17  
    18         //1.获取所有的student对象
    19         Elements student = document.getElementsByTag( "student" );
    20         System.out.println(student);
    21         System.out.println("========================");
    22  
    23         //2.获取id属性的元素对象
    24         Elements id = document.getElementsByAttribute( "id" );
    25         System.out.println(id);
    26         System.out.println("========================");
    27  
    28         //3.根据id属性值获取唯一的element对象
    29         Elements value = document.getElementsByAttributeValue( "id", "itcast" );
    30         System.out.println(value);
    31     }
    32 }
    View Code

      3、Elements

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

      4、Element 对象

        Element 表示元素对象

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

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

        (2)获取属性值的方法

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

        (3)获取文本内容

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

          Demo:

     1 package com.ks.jsoup;
     2  
     3 import org.jsoup.Jsoup;
     4 import org.jsoup.nodes.Document;
     5 import org.jsoup.nodes.Element;
     6 import org.jsoup.select.Elements;
     7  
     8 import java.io.File;
     9 import java.io.IOException;
    10  
    11 /**
    12  * Element对象
    13  */
    14 public class JsoupDemo4 {
    15     public static void main(String[] args) throws IOException {
    16         String path = JsoupDemo4.class.getClassLoader().getResource( "xml/student.xml" ).getPath();
    17         Document document = Jsoup.parse( new File( path ), "UTF-8" );
    18  
    19         //通过document获取所有的name标签,可以获取两个
    20         Elements name = document.getElementsByTag( "name" );
    21         System.out.println(name.size());
    22  
    23         //通过element对象子标签对象,可以获取一个
    24         Element ele_Student = document.getElementsByTag( "name" ).get( 0 );
    25         Elements els_name = ele_Student.getElementsByTag( "name" );
    26         System.out.println(els_name.size());
    27  
    28         //获取student对象的属性值
    29         String number = ele_Student.attr( "number" );
    30         System.out.println(number.length());
    31         //获取文本内容
    32         String text = els_name.text();
    33         String html = els_name.html();
    34         System.out.println(text);
    35         System.out.println(html);
    36     }
    37 }
    View Code

      5、Node 对象

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

    三、Jsoup 快捷查询方式

      1、selector 选择器

        使用的方法:Elements

    Elements    select​(String cssQuery)
    

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

        Demo:

    1  import org.jsoup.Jsoup;
     2 import org.jsoup.nodes.Document;
     3 import org.jsoup.nodes.Element;
     4 import org.jsoup.select.Elements;
     5 
     6 import java.io.File;
     7 import java.io.IOException;
     8 
     9 /**
    10  *选择器查询
    11  */
    12 public class JsoupDemo {
    13     public static void main(String[] args) throws IOException {
    14         //1.获取student.xml的path
    15         String path = JsoupDemo5.class.getClassLoader().getResource("student.xml").getPath();
    16         //2.获取Document对象
    17         Document document = Jsoup.parse(new File(path), "utf-8");
    18 
    19         //3.查询name标签
    20 
    21         Elements elements = document.select("name");
    22         System.out.println(elements);
    23         System.out.println("=----------------");
    24         //4.查询id值为java的元素
    25         Elements elements1 = document.select("#java");
    26         System.out.println(elements1);
    27         System.out.println("----------------");
    28         //5.获取student标签并且number属性值为java_0001的age子标签
    29         //5.1.获取student标签并且number属性值为java_0001
    30         Elements elements2 = document.select("student[number="java_0001"]");
    31         System.out.println(elements2);
    32         System.out.println("----------------");
    33 
    34         //5.2获取student标签并且number属性值为java_0001的age子标签
    35         Elements elements3 = document.select("student[number="java_0001"] > age");
    36         System.out.println(elements3);
    37 
    38     }
    39 
    40 }

      2、XPath 

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

        使用步骤:

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

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

          Demo:

     1 import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
     2 import cn.wanghaomiao.xpath.model.JXDocument;
     3 import cn.wanghaomiao.xpath.model.JXNode;
     4 import org.jsoup.Jsoup;
     5 import org.jsoup.nodes.Document;
     6 import org.jsoup.select.Elements;
     7 import java.io.File;
     8 import java.io.IOException;
     9 import java.util.List;
    10 
    11 /**
    12  *XPath查询
    13  */
    14 public class JsoupDemo6 {
    15     public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
    16         //1.获取student.xml的path
    17         String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
    18         //2.获取Document对象
    19         Document document = Jsoup.parse(new File(path), "utf-8");
    20 
    21         //3.根据document对象,创建JXDocument对象
    22         JXDocument jxDocument = new JXDocument(document);
    23 
    24         //4.结合xpath语法查询
    25         //4.1查询所有student标签
    26         List<JXNode> jxNodes = jxDocument.selN("//student");
    27         for (JXNode jxNode : jxNodes) {
    28             System.out.println(jxNode);
    29         }
    30 
    31         System.out.println("--------------------");
    32 
    33         //4.2查询所有student标签下的name标签
    34         List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
    35         for (JXNode jxNode : jxNodes2) {
    36             System.out.println(jxNode);
    37         }
    38 
    39         System.out.println("--------------------");
    40 
    41         //4.3查询student标签下带有id属性的name标签
    42         List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
    43         for (JXNode jxNode : jxNodes3) {
    44             System.out.println(jxNode);
    45         }
    46         System.out.println("--------------------");
    47         //4.4查询student标签下带有id属性的name标签 并且id属性值为java
    48 
    49         List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='java']");
    50         for (JXNode jxNode : jxNodes4) {
    51             System.out.println(jxNode);
    52         }
    53     }
    54 
    55 }

     

  • 相关阅读:
    Ubuntu下Anaconda3的安装
    在Ubuntu上安装微信
    HTTP Response Code 中文详解
    urllib.parse.urldefrag(url)的解释
    极大似然估计
    多序列比对后可视化之texshade
    Musle比对软件(windows)
    windows本地blast
    绘制pathway富集散点图
    计算相关性系数
  • 原文地址:https://www.cnblogs.com/niujifei/p/12404562.html
Copyright © 2011-2022 走看看