Java中xml解析---jsoup

使用jsoup对xml文件进行解析

jsoup主要是用于对html进行解析,但是xml和html在结构上大体是一样的,所以也能用于对xml解析且在获取元素时是不区分大小写的,这一点和dom4j是有区别的.jsoup同样支持XPATH的方式来获取节点,并且还提供了选择器的方式来对节点进行选择。

jsoup使用普通方式来解析xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class demo{
public static void main(String[] args) throws IOException {
// parse()是个重载方法,提供了多种获取Document对象的方式
Document document = Jsoup.parse(demo.class.getClassLoader().getResourceAsStream("JDBC.xml"), "UTF-8", "");
// Document document = Jsoup.parse(new File(demo.class.getClassLoader().getResource("JDBC.xml")), "UTF-8");

Element element = document.getElementById("mysql"); // 类似于JS,通过id获取单个对象
for(Element e : element.children()){
System.out.println(e.tagName + "..." + e.text());
} // 遍历节点下的所有子节点,并打印标签名和内容

Elements elements = document.getElementByTag("database"); // 通过标签名获取多个对象,Elements继承ArrayList
for(Element e : elements){
for(Element e1 : e.children()){
System.out.println(e1.tagName + "..." + e.text());
}
} // 遍历列表中的所有元素,再获取这些元素下的所有子标签及其内容

Elements elements1 = document.getElementByAttributeValue("id", "mysql"); // 通过属性来获取多个对象
System.out.println(elements1.get(0)) // 获取列表中的第一个元素,打印出的是该标签的整个XML结构

}
}

jsoup使用选择器方式来解析xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class demo {
public static void main(String[] args) throws IOException {
Document document = Jsoup.parse(demo.class.getClassLoader().getResourceAsStream("JDBC.xml"), "UTF-8", "");

Elements elements = document.select("#mysql"); // id选择器
Elements elements1 = document.select(".mysql"); // 类选择器
Elements elements2 = document.select("database"); // 标签选择器
Elements elements3 = document.select("driver[name='driver']"); // 标签 + 属性选择器
Elements elements4 = document.select("[name]"); // 属性选择器
for (Element e: elements4){
System.out.println(e.tagName() + "..." + e.text());
} // 打印获取到的所有的标签及其内容

}
}

jsoup使用XPATH方式来解析xml,需要注意的是获取根目录不使用/,获取指定标签都是使用//:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class demo {
public static void main(String[] args) throws IOException, XpathSyntaxErrorException {

Document document = Jsoup.parse(demo.class.getClassLoader().getResourceAsStream("JDBC.xml"), "UTF-8", "");

JXDocument jxDocument = new JXDocument(document); // JXDocument对Document对象进行封装使其具有XPATH的功能

List<JXNode> jxNodes = jxDocument.selN("//database"); // 获取所有的database标签,返回值是一个列表
for (JXNode j:jxNodes){
for (Element e:j.getElement().children()){
System.out.println(e.tagName() + "..." + e.text());
}
} // 获取标签内容时,需要将JXNode对象转换为Element对象

List<JXNode> jxNodes1 = jxDocument.selN("//database[@id='mysql']"); // 增加筛选条件
for (JXNode j:jxNodes1){
for (Element e:j.getElement().children()){
System.out.println(e.tagName() + "..." + e.text());
}
}

JXNode jxNode = jxDocument.selNOne("//database[@id='mysql']"); // 就算有多个标签,也只返回第一个标签
for (Element e:jxNode.getElement().children()){
System.out.println(e.tagName() + "..." + e.text());
}

}
}