「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。
前言
大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要介绍XML的两种常见的解析规范以及常用的解析器,和Jsoup解析器的详细介绍以及如何使用。
1. XML解析器
1.1 XML解析技术
解析XML其实就是把XML文档加载到内存中处理,XML解析规范有两种,分别是DOM和SAX。
1.1.1 DOM
通过DOM方式解析XML,需要把XML文档一次全部加载到内存中,把文档元素作为一个dom树,通过Document对象操作元素,可以进行CRUD操作。
- 优点:文档的结构清晰,可以进行CRUD操作。
- 缺点:需要较大的内存。
1.1.2 SAX
通过SAX方式解析XML,是对XML一行一行读取加载到内存中,基于事件驱动的,当SAX读取一行数据后,会通知用户读取到的信息,用户根据返回的信息完成对应的业务逻辑。当整个文档读取结束后,SAX不会保存任何数据,也就是说,SAX读一行丢一行,在读取过程中,内存中永远只存在一行数据。
- 优点:占用内存少。
- 缺点:不能保存文档结构,不能进行增删改,只能进行读取。
1.2 常见的XML解析器
所谓XML解析器其实就是对DOM和SAX解析规范(接口)的具体实现(类)。
以下3种解析器大家了解即可,我们主要介绍最后一种。
- JAXP:JAXP是由sun公司提供的,用于隐藏底层解析器。JAXP本身并不是解析器,而是通过特定的方式去查找解析器来解析XML文档,JAXP支持DOM和SAX两种规范。
- DOM4J:DOM4J是一款优秀的开源解析器,支持JAXP,DOM和SAX。
- PULL::PULL是安卓系统内置的XML文档解析器。支持SAX。
最后一种也是我们重点介绍的一种:JSoup解析器。
1.3 JSoup解析器
1.3.1 Jsoup简介
先引用百度百科(baike.baidu.com/item/jsoup/…)的介绍:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
jsoup能够解析html,当然也能够解析html同根的xml。
1.3.2 Jsoup使用
在了解Jsoup具体使用前,我们先来了解一些类,方便我们后面更好理解使用Jsoup。
4.3.2.1 Jsuop
Jsoup是用来HTML或XML解析为Doucment文档的工具类。
需要我们关注的就是它的许多重载的parse方法。
static Document parse•(File file, String charsetName)
根据文件和字符集将XML文档解析为Dcoument
static Document parse•(String html)
将XML字符串解析为Document
static Document parse•(URL url, int timeoutMillis)
根据URL,将XML文档解析为Document,第二个参数表示连接和读取超时的时间(毫秒为单位),如果超过该时间,则抛出IO异常。
官方文档链接:jsoup.org/apidocs/org…
1.3.2.2 Document
Document也就是一颗dom树,我们可以通过Document类来对元素进行操作。
需要我们注意的就是它的用来获取Element对象的方法,这些方法都是从它的父类Element继承而来。
Element getElementById•(String id)
按照id查找元素
Elements getElementsByTag•(String tagName)
按照标签名称查找元素
Elements getElementsByAttribute•(String key)
按照属性名称查找元素
Elements getElementsByAttributeValue•(String key, String value)
按照属性名和属性值查找元素
官方文档链接:jsoup.org/apidocs/org…
1.3.2.3 Element
XML元素,可以通过Element来提取数据,操作XML。
Element是Document类的父类,除了上述Document的四个方法之外我们还需要了解以下方法:
String attr(String key)(继承自Node)
根据属性名称获取属性值
String text()
获取此元素和其子元素的文本内容。
String html()
获取标签体的所有内容(包括字标签的字符串内容)
官方文档链接:jsoup.org/apidocs/org…
1.3.2.4 Elements
Elements实际上就是ArrayList集合,泛型是Element。
1.3.2.5 Node
抽象类,节点模型。Element和Document都是Node的实例。
1.3.2.6 Jsoup使用
使用步骤:
- 导入jar包。
- 通过parse方法获取Document对象。
- 通过getElementXXX获取Elements集合。
- 通过Elements获取Element元素。
【实例展示】
//获取Document对象
Document document = Jsoup.parse(new File("F:\Demo\JavaWebDemo\JavaWebStudyDemo\xml\src\main\java\com\example\jsoup\test.xml"), "utf-8");
//获取Elements
Elements elements = document.getElementsByTag("dept");
Element element = elements.get(0);
System.out.println(element.select("id"));
1.3.3 Jsoup查询XML元素
1.3.3.1 通过select查找元素
通过Elements种的select方法来获取具体的Element。
public Elements select•(String cssQuery)
找到与Selector CSS查询匹配的元素
查询语法:
//查询指定标签名
select("tagName");
//查询指定id
select("#id");
//查询指定class
select(".className");
//查询所有子元素
select("div a");
//查询直接子元素
select("div > a");
官方文档链接:jsoup.org/apidocs/org…
1.3.3.2 通过Xpath查找元素
官方解释:XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。
常用查询语法:
//选取标签的所有子元素
//标签名
//选取根元素 bookstore。
/标签名
//选取标签子元素的第一个元素。
/标签名/子元素[1]
//选取标签子元素的最后一个元素。
/标签名/子元素[last()]
语法链接:www.w3school.com.cn/xpath/xpath…
小结
以上就是XML解析器的一些介绍,以及Jsoup解析器的使用,希望能对读者有所帮助,如有不正之处,欢迎留言指正。