JavaWeb 之 XML 解析器 — Jsoup

1、Jsoup 解析步骤

  Jsoup中文帮助API:https://www.open-open.com/jsoup/css

  步骤:html

一、导入 jar 包(官网下载地址:Jsoup官网java

二、解析 XML文件node

  ① 获得解析文件的路径:类加载器加载文件的路径网络

  ② 构建一个 File 对象dom

  ③ 调用 Jsoup 的 parse 方法解析 XML 文件获得一个 Document 对象ide

  ④ 调用 Document 的相关方法获得相关的标签对象(Element),Element 就是一个存放了 Element 对象的 ArrayList 集合工具

  ⑤ 调用 Element 的相关方法获取数据url

  XML 文件:spa

 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 }

 

2、Jsoup 对象的使用

  一、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\"?>\n" +
23                 "\n" +
24                 "<students>\n" +
25                 "\t<student number=\"0001\">\n" +
26                 "\t\t<name>tom</name>\n" +
27                 "\t\t<age>18</age>\n" +
28                 "\t\t<sex>male</sex>\n" +
29                 "\t</student>\n" +
30                 "\t<student number=\"0002\">\n" +
31                 "\t\t<name>jack</name>\n" +
32                 "\t\t<age>18</age>\n" +
33                 "\t\t<sex>female</sex>\n" +
34                 "\t</student>\n" +
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

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

  三、Elements

    Elements:元素 Element 对象的集合,能够当作 ArrayList<Element> 来使用

  四、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

  五、Node 对象

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

3、Jsoup 快捷查询方式

  一、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 }

 

  二、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 }
相关文章
相关标签/搜索