HTML&XML解析器--Jsoup
Posted Lucas小毛驴博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML&XML解析器--Jsoup相关的知识,希望对你有一定的参考价值。
html&XML解析器
一.Jsoup概述
-
Jsoup简介
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容,它提供一套非常省力的API,可以通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
同样,Jsoup能解析HTML,也可以解析XML
-
Jsoup主要功能
- 从一个URL,文件或字符串中解析HTML(XML)
- 使用DOM或CSS的选择器来查找和取出数据
- 可以操作HTML/XML的元素,属性和文本
-
Jsoup主要类
- Jsoup:工具类,可以解析html或xml文档,返回一个Document
- Document:文档对象,代表内存中的DOM树
- Element:元素对象
- Elements:元素对象Element的集合,可以当做ArrayList<Element>来使用
- Node:节点对象,是Document和Element的父类
二.Jsoup的应用
-
快速入门步骤
- 导入相关的jar包
- 获取Document对象
- 获取对应标签的Element对象
- 获取数据
XML文件student.xml
<students> <student number="0001"> <name id="itcast"> <xing>张</xing> <ming>三</ming> </name> <age>18</age> <sex>male</sex> </student> <student number="0002"> <name>jack</name> <age>18</age> <sex>female</sex> </student> </students>
package com.zzy.www.JsoupTest; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.File; import java.io.IOException; public class JsoupDemo1 { public static void main(String[] args) throws IOException { String xmlPath = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath(); // 获取Document对象 Document document = Jsoup.parse(new File(xmlPath), "utf-8"); // 获取对应标签的Element对象 获取name标签 Elements ele = document.getElementsByTag("name"); // System.out.println(ele); // 获取第一个name的Element对象 Element e1 = ele.get(0); System.out.println(e1); } }
-
相关对象的API使用介绍
-
Jsoup
Jsoup类是任何Jsoup程序的入口点,并且提供了从各种来源加载和解析HTML/XML文档的方法。
主要方法有如下:
static Connection connect(String url)
:创建并返回URL的连接static Document parse(File in, String charsetName)
:将制定的字符集文件解析成文档static Document parse(String html)
:将给定的html代码解析成文档static String clean(String bodyHtml,Whitelist whitelist)
:从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。
-
Document
Document代表了内存中的dom树。
主要方法有:
Element getElementById(String id)
:根据id属性值获取唯一的element对象Elements getElementByTag(String tagName)
:根据标签名获取元素对象的集合Elements getElementByAttribute(String key)
:根据属性名称获取元素对象集合Elements getElementByAttributeValue(String key, String value)
:根据对应的属性名和属性值获取元素对象集合
public class JsoupDemo2 { public static void main(String[] args) throws IOException { String xmlPath = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath(); // 获取Document对象 Document doc = Jsoup.parse(new File(xmlPath), "utf-8"); // 根据ID值获取Element对象 Element eleId = doc.getElementById("itcast"); System.out.println(eleId); System.out.println("================="); // 获取所有的student对象 // 通过标签名获取 Elements eleStudents = doc.getElementsByTag("student"); System.out.println(eleStudents); System.out.println("---------------------"); // 获取属性名为id的元素对象 Elements eleAttrId = doc.getElementsByAttribute("id"); System.out.println(eleAttrId); System.out.println("+++++++++++++++++++++"); // 获取属性名为number,属性值为0002的元素对象 Elements ele = doc.getElementsByAttributeValue("number", "0002"); System.out.println(ele); } }
-
Elements
Element对象的集合,当做ArrayList<Element>处理
-
Element
Element代表了元素对象
主要有以下几类方法:
- 获取子元素对象
Element getElementById(String id)
:根据id属性值获取唯一的element对象Elements getElementByTag(String tagName)
:根据标签名获取元素对象的集合Elements getElementByAttribute(String key)
:根据属性名称获取元素对象集合Elements getElementByAttributeValue(String key, String value)
:根据对应的属性名和属性值获取元素对象集合
- 获取属性值
String attr(String key)
:根据属性名称获取属性值
- 获取文本内容
String text()
:获取文本内容String html()
:获取标签体的所有内容(包括子标签的字符串内容)
public class JsoupDemo3 { public static void main(String[] args) throws IOException { String xmlPath = JsoupDemo1.JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath(); // 获取Document对象 Document doc = Jsoup.parse(new File(xmlPath), "utf-8"); // 先获取Element元素对象 Elements eles = doc.getElementsByTag("student"); Element ele = eles.get(0); // 获取Element元素的属性值 String attr = ele.attr("number"); System.out.println(attr); // 输出:0001 System.out.println("--------------"); // 获取元素的子元素对象 Elements ele1 = ele.getElementsByTag("name"); System.out.println(ele1); // 获取文本内容 String txt = ele1.text(); System.out.println(txt); // 输出:张 三 System.out.println("==============="); String html = ele1.html(); System.out.println(html); // 输出: // <xing> // 张 // </xing> // <ming> // 三 // </ming> } }
- 获取子元素对象
-
还可以使用快捷查询方式,使用选择器Selector
static Elements select(String cssQuery)
:详细语法需要查看Jsoup官方文档https://jsoup.org/apidocs/org/jsoup/select/Selector.html
public class JsoupDemo4 { public static void main(String[] args) throws IOException { String xmlPath = JsoupDemo4.class.getClassLoader().getResource("student.xml").getPath(); Document doc = Jsoup.parse(new File(xmlPath), "utf-8"); // 通过标签名查找 Elements eles = doc.select("name"); System.out.println(eles); System.out.println("----------------"); // 通过id值查找 Elements eles1 = doc.select("#itcast"); System.out.println(eles1); System.out.println("================"); // 通过属性值查找 number=0002 Elements eles2 = doc.select("[number=‘0002‘]"); System.out.println(eles2); } }
-
-
学习链接
https://blog.csdn.net/weixin_34129696/article/details/91885803
以上是关于HTML&XML解析器--Jsoup的主要内容,如果未能解决你的问题,请参考以下文章
Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本