zoukankan      html  css  js  c++  java
  • 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 }

      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 }

      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 }

      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 }

      3、

  • 相关阅读:
    支持向量机SVM知识点概括
    决策树知识点概括
    HDU 3081 Marriage Match II
    HDU 3572 Task Schedule
    HDU 4888 Redraw Beautiful Drawings
    Poj 2728 Desert King
    HDU 3926 Hand in Hand
    HDU 1598 find the most comfortable road
    HDU 4393 Throw nails
    POJ 1486 Sorting Slides
  • 原文地址:https://www.cnblogs.com/niujifei/p/15093852.html
Copyright © 2011-2022 走看看