[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

浙公网安备 33010602011771号