XML转JavaBean以及JavaBean转XML

1 篇文章 0 订阅


前言

根据leader安排的功能,需要完成指定目录下所有XML通过转换对象存入数据库
后续也会有查询出来数据转XML进行传输、展示

一、根据XML格式创建对应实体类

因为项目里XML的保密性我就不拿出来了,把一个简单的pom.XML来做案例
不过里面也有对象、数组、多个对象

<?xml version="1.0" encoding="UTF-8"?>
<project id="1">
    <parent>
        <groupId>com.alan</groupId>
        <artifactId>alan</artifactId>
        <version>2.5.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <modules>
        <module>alan-one</module>
        <module>alan-two</module>
        <module>alan-three</module>
    </modules>
    <artifactId>alan-modules</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

1)首先是最主要的实体

/**
 * 这里是设置类为根节点,但我名字与pom里面不一致所以需要指定name
 */
@XmlRootElement(name = "project")
public class ProjectXml {
    /**
     * xml节点中的属性 若名字不一致可通过name来指定
     */
    @XmlAttribute
    private String id;
    /**
     * xml节点  若名字不一致可通过name来指定
     */
    @XmlElement
    private ParentXml parent;

    @XmlElement
    private String modelVersion;

    @XmlElement
    private ModulesXml modules;

    @XmlElement
    private String artifactId;

    /**
     * 使用@XmlElementWrapper注解后,将会在原xml结点上再包装一层xml
     * 因为是多个dependency节点,所以需要再创建一个节点包住
     */
    @XmlElementWrapper(name = "dependencies")
    @XmlElement
    private List<DependenciesXml> dependency;

    /**
     * a.注解解决 JavaBean 属性名称与字段名称之间的名称冲突,或者用于防止字段/属性的映射
     * b.阻止将 JavaBean 属性映射到 XML 表示形式
     * @return
     */
    @XmlTransient
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

后续的get、set、tostring就不贴了,占地方

2)根据XML里的格式,还需要创建一个对象
创建里面的节点多余的同样节省文章长度

@XmlRootElement(name = "parent")
public class ParentXml {

    @XmlElement
    private String groupId;

    @XmlElement
    private String artifactId;

    @XmlElement
    private String version;

    @XmlTransient
    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

3)XML里面的数组
使用String[]来接收转换的值

@XmlRootElement(name = "modules")
public class ModulesXml {

    @XmlElement
    private String[] module;

    @XmlTransient
    public String[] getModule() {
        return module;
    }

    public void setModule(String[] module) {
        this.module = module;
    }

    @Override
    public String toString() {
        return "ModulesXml{" +
                "module=" + Arrays.toString(module) +
                '}';
    }
}

4)多个对象实体
这里要注意,@XmlRootElement的name属性是"dependency",因为前面使用了@XmlElementWrapper注解会在<dependency>节点的上面创建<dependencies>

@XmlRootElement(name = "dependency")
public class DependenciesXml {
    @XmlElement
    private String groupId;

    @XmlElement
    private String artifactId;

    @XmlElement
    private String version;

    @XmlTransient
    public String getGroupId() {
        return groupId;
    }

二、编写JaxbUtil工具类

xml转JavaBean

    public static <T> T xmlConversionJavabean(String xml, Class<T> c) {
        T t = null;
        try {
            // 调用成功创建了一个可解析示例 xxx.xml 文件的上下文
            JAXBContext context = JAXBContext.newInstance(c);
            // 创建一个<t> Unmarshaller <t>对象,该对象可用于将XML数据转换为Java内容树。
            Unmarshaller unmarshaller = context.createUnmarshaller();
            t = (T) unmarshaller.unmarshal(new StringReader(xml));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }

运行结果

定义测试方法

JavaBean转xml

创建实体类,赋对应的参数

运行结果

成功还原pom.xml

总结

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

以上就是今天要讲的内容,本文仅仅简单介绍了JAXB的使用,而JAXB提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值