使用 Jackson 解析 XML
# 05.使用 Jackson 解析 XML
Java 原生的解析 XML 文件的 API,使用起来并不直观易用,因为我们可以考虑使用第三方库
# XML 与对象之间的关系
前面我们介绍了 DOM 和 SAX 两种解析 XML 的标准接口。但是,无论是 DOM 还是 SAX,使用起来都不直观。
观察 XML 文档的结构:
<?xml version="1.0" encoding="UTF-8" ?>
<book id="1">
<name>Java核心技术</name>
<author>Cay S. Horstmann</author>
<isbn lang="CN">1234567</isbn>
<tags>
<tag>Java</tag>
<tag>Network</tag>
</tags>
<pubDate/>
</book>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
我们发现,它完全可以对应到一个定义好的 JavaBean 中:
package chapter12;
import java.util.List;
public class Book {
public long id;
public String name;
public String author;
public String isbn;
public List<String> tags;
public String pubDate;
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
", isbn='" + isbn + '\'' +
", tags=" + tags +
", pubDate='" + pubDate + '\'' +
'}';
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
如果能直接从 XML 文档解析成一个 JavaBean,那比 DOM 或者 SAX 不知道容易到哪里去了。
# Jackson
幸运的是,一个名叫 Jackson 的开源的第三方库可以轻松做到 XML 到 JavaBean 的转换。
我们可以添加如下依赖:
jackson-annotations-2.14.2.jar
jackson-core-2.14.2.jar
jackson-databind-2.14.2.jar
jackson-dataformat-xml-2.14.2.jar
stax2-api-4.2.1.jar
1
2
3
4
5
2
3
4
5
如果你使用 Maven:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>stax2-api</artifactId>
<version>4.2.1</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
然后就可以用下面几行代码解析:
InputStream input = XMLDemo3.class.getResourceAsStream("/book.xml");
JacksonXmlModule moudle = new JacksonXmlModule();
XmlMapper mapper = new XmlMapper(moudle);
Book book = mapper.readValue(input, Book.class);
System.out.println(book);
1
2
3
4
5
2
3
4
5
输出结果:
Book{id=1, name='Java核心技术', author='Cay S. Horstmann', isbn='1234567', tags=[Java, Network], pubDate=''}
1
注意到 XmlMapper
就是我们需要创建的核心对象,可以用 readValue(InputStream, Class)
直接读取 XML 并返回一个 JavaBean。
如果要解析的数据格式不是 Jackson 内置的标准格式,那么需要编写一点额外的扩展来告诉 Jackson 如何自定义解析。这里我们不做深入讨论,可以参考 Jackson 的 官方文档 (opens new window)。
上次更新: 2024/10/1 21:14:36