共计 1288 个字符,预计需要花费 4 分钟才能阅读完成。
前面我们介绍了 DOM 和 SAX 两种解析 XML 的标准接口。但是,无论是 DOM 还是 SAX,使用起来都不直观。
观察 XML 文档的结构:
<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> |
我们发现,它完全可以对应到一个定义好的 JavaBean 中:
public class Book {public long id; | |
public String name; | |
public String author; | |
public String isbn; | |
public List<String> tags; | |
public String pubDate; | |
} |
如果能直接从 XML 文档解析成一个 JavaBean,那比 DOM 或者 SAX 不知道容易到哪里去了。
幸运的是,一个名叫 Jackson 的开源的第三方库可以轻松做到 XML 到 JavaBean 的转换。我们要使用 Jackson,先添加一个 Maven 的依赖:
- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.10.1
然后,定义好 JavaBean,就可以用下面几行代码解析:
InputStream input = Main.class.getResourceAsStream("/book.xml"); | |
JacksonXmlModule module = new JacksonXmlModule(); | |
XmlMapper mapper = new XmlMapper(module); | |
Book book = mapper.readValue(input, Book.class); | |
System.out.println(book.id); | |
System.out.println(book.name); | |
System.out.println(book.author); | |
System.out.println(book.isbn); | |
System.out.println(book.tags); | |
System.out.println(book.pubDate); |
注意到 XmlMapper
就是我们需要创建的核心对象,可以用 readValue(InputStream, Class)
直接读取 XML 并返回一个 JavaBean。运行上述代码,就可以直接从 Book 对象中拿到数据:
1 | |
Java 核心技术 | |
Cay S. Horstmann | |
1234567 | |
[ | ]|
null |
如果要解析的数据格式不是 Jackson 内置的标准格式,那么需要编写一点额外的扩展来告诉 Jackson 如何自定义解析。这里我们不做深入讨论,可以参考 Jackson 的官方文档。
练习
使用 Jackson 解析 XML。
下载练习
小结
使用 Jackson 解析 XML,可以直接把 XML 解析为 JavaBean,十分方便。
正文完
星哥玩云-微信公众号
