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 }