1、导包
官网地址:https://jsoup.org/ 这里可以找到jar包的下载链接;
2、简要说明
- 按照官网的介绍,
jsoup
是一个用于解析HTML的Java库,XML相对于HTML来讲更为严格肯定也是没有问题的; jsoup
以文件、字节流或URL等各种方式将HTML/XML文件转换为一个Document
对象;- 这个
Document
对象和HTML中的Document对象极为类型,甚至很多方法都完全相同,可以简单地理解为DOM树的Java实现;
- DOM操作中比较重要的一个环节就是子元素的获取
Element
:Document继承自Element,即继承了Element获取子元素的各种方法Selector
:jsoup中自带的选择器类,相当于H5的selectorJsoupXpath
:支持XPath语法的解析器
3、相关示例
3.0、XML文件
<?xml version="1.0" ?>
<students>
<student>
<name number="s01">张三</name>
<age>19</age>
<gender>男</gender>
</student>
<student>
<name number="s02">李四</name>
<age>18</age>
<gender>女</gender>
</student>
</students>
3.1、Element方法获取子节点
private static void demo01() throws IOException {
// 通过类加载器定位获取xml文件路径
ClassLoader loader = JsoupDemo.class.getClassLoader();
URL url = loader.getResource("students.xml");
// 这个Document对象和web中的Document对象极其地类似
Document document = Jsoup.parse(new File(url.getPath()), "utf-8");
// System.out.println(document);
Elements elements = document.getElementsByTag("name");
for (Element element : elements) {
System.out.println(element.text());
}
}
3.2、Selector获取子元素
private static void demo03() throws IOException {
// 通过类加载器定位获取xml文件位置
ClassLoader loader = JsoupDemo.class.getClassLoader();
String path = loader.getResource("students.xml").getPath();
// 获取Document对象,也可以说是根节点元素
Document doc = Jsoup.parse(new File(path), "utf-8");
// 支持id选择器标识'#',类选择器标识'.',标签选择器及属性选择器等
Elements element = doc.select("name[number=s01]");
System.out.println(element);
}
输出结果:
<name number="s01">
张三
</name>
3.3、JsoupXpath
- github地址:https://github.com/zhegexiaohuozi/JsoupXpath
- 根据官方的说法,JsoupXpath语法解析处理采用Antlr4进行了重构,因此使用时还需要添加其他额外的依赖包
- antlr4-runtime-4.7.2.jar
- slf4j-api-1.7.25.jar
- commons-lang3-3.3.2.jar
- JsoupXpath有自己的Document对象
JXDocument
与Node对象JXNode
public class JsoupXpathDemo {
public static void main(String[] args) throws IOException {
// 获取Document对象
ClassLoader loader = JsoupXpathDemo.class.getClassLoader();
String path = loader.getResource("students.xml").getPath();
Document doc = Jsoup.parse(new File(path), "utf-8");
// 通过Document对象初始化JXDocument对象
JXDocument jxDoc = JXDocument.create(doc);
// 使用Xpath语法进行子元素选择
JXNode node = jxDoc.selNOne("//name[@number='s01']");
// 对象之间相互转换,类比jQuery对象与DOM对象之间的关系
Element element = node.asElement();
System.out.println(element);
System.out.println(node);
}
}
运行结果:
<name number="s01">
张三
</name>
<name number="s01">
张三
</name>