[Ngbatis源码学习] Ngbatis 源码阅读之 Jsoup 简单使用说明
在 Ngbatis
中解析 xml
的工具是 Jsoup
,因为之前没有接触过,在这里简要的介绍和编写一下。
查了一些资料,Jsoup
似乎用作爬虫和解析 HTML
的场景比较多, 但是 XML
是一样的,同样是将页面解析为一个 DOM
树,然后使用 Jsoup
提供的方法来查询。因为 Jsoup
的解析查询方法十分直观,且能快速上手,因为这个原因所以在 Ngbatis
中选择了 Jsoup
的方式。
源码地址
Jsoup
在 GitHub
上的源码地址:https://github.com/jhy/jsoup
使用方式
- 引入
Jsoup
的依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.4</version>
</dependency>
- 之前已经将
XML
文件数据加载到了Resource
中,从Resource
中获取InputStream
流,并使用Jsoup
解析成Document
对象操作。这里使用的是Jsoup.parse
这个方法。
Document doc = Jsoup.parse(resource.getInputStream(), "UTF-8", "http://example.com/");
其实 Jsoup.parse
有很多重载方法,可以接受 File
类型数据,也可以接受 html
文本字符串,按照需要调用方法即可。简要列出相关 Jsoup.parse
方法:
public static Document parse(String html, String baseUri) {
return Parser.parse(html, baseUri);
}
public static Document parse(String html, String baseUri, Parser parser) {
return parser.parseInput(html, baseUri);
}
public static Document parse(String html, Parser parser) {
return parser.parseInput(html, "");
}
public static Document parse(String html) {
return Parser.parse(html, "");
}
public static Document parse(File file, @Nullable String charsetName, String baseUri) throws IOException {
return DataUtil.load(file, charsetName, baseUri);
}
public static Document parse(File file, @Nullable String charsetName) throws IOException {
return DataUtil.load(file, charsetName, file.getAbsolutePath());
}
public static Document parse(File file) throws IOException {
return DataUtil.load(file, (String)null, file.getAbsolutePath());
}
public static Document parse(File file, @Nullable String charsetName, String baseUri, Parser parser) throws IOException {
return DataUtil.load(file, charsetName, baseUri, parser);
}
public static Document parse(@WillClose InputStream in, @Nullable String charsetName, String baseUri) throws IOException {
return DataUtil.load(in, charsetName, baseUri);
}
public static Document parse(InputStream in, @Nullable String charsetName, String baseUri, Parser parser) throws IOException {
return DataUtil.load(in, charsetName, baseUri, parser);
}
-
解析成
Document
对象之后,这个Document
对象其实就是一整个XML
文件,通过Document
的各种getElement*
方法来获取XML
内部的标签内容,即得到的Elements
或Element
对象就是一个个XML
的标签内容。举个栗子:
// 获取所有 mapper 标签内容
Elements elementsByTag = doc.getElementsByTag("mapper");
for (Element element : elementsByTag) {
// ... ...
}
Element
元素也可以通过调用 childNodes
方法来获取 Node
节点对象相关信息。
稍微翻了一下源码,Element
元素继承自 Node
节点,按照我的理解,其实 Node
节点对象与 Element
元素对象都可以表示 XML
标签,但是 Node
节点更通用一点,定义了一组例如获取父节点、子节点、兄弟节点等的方法,而 Element
添加了更多扩展或特定方法,比如获取标签名、属性、获取文本内容等。
在 Ngbatis
中对于 Jsoup
的使用也是只用到了这些对象与相关方法,只用作解析 XML
文件获取 XML
中的相关内容,也并未使用到更复杂的操作,所以在这里只需要对 Jsoup
有初步的认识,能够使用调用相关方法即可。
本文来自博客园,作者:knqiufan,转载请注明原文链接:https://www.cnblogs.com/knqiufan/p/18244981