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 }
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 }
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 }
Elements:元素 Element 對象的集合,能夠當作 ArrayList<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 }
Node 表示節點對象,是 Document 和 Element 的父類
使用的方法: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 即爲 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 }