从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

    • JavaEE概念

    • Ant

    • Maven

    • 日志

    • Junit

    • JDBC

    • XML和JSON

      • 什么是XML
      • 解析XML的方式
      • 使用Jackson解析XML
        • XML与对象之间的关系
        • Jackson
      • JSON
      • 小结
      • XML与JSON
    • Java
  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaEE
  • XML和JSON
2023-04-17
目录

使用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

我们发现,它完全可以对应到一个定义好的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

如果能直接从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

‍

如果你使用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

‍

‍

然后就可以用下面几行代码解析:

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

‍

输出结果:

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)。

在GitHub上编辑此页 (opens new window)
上次更新: 2023/4/19 10:50:30
解析XML的方式
JSON

← 解析XML的方式 JSON→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式