使用JAXB将xml转成Java对象

这篇具有很好参考价值的文章主要介绍了使用JAXB将xml转成Java对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用JAXB将xml转成Java对象

工作中遇到个问题,需要将xml转对象,之前复杂的xml都是自己用dom4j来解析组装成Java对象,但是对于简单的,看到了JAXB处理的这种方式,就整理下,写成个工具类。

1. xml内容

city.xml

<?xml version="1.0" encoding="UTF-8" ?>
<c c1="0">
    <a>10</a>
    <b>20</b>
    <d d1="101280101" d2="重庆" d3="nanping" d4="南坪"/>
    <d d1="101280102" d2="重庆" d3="yubei" d4="渝北"/>
    <d d1="101280103" d2="重庆" d3="dadukou" d4="大渡口"/>
</c>

2. Java对象类

  • CityList.xml
package com.stormkai.jaxb;

import lombok.Data;
import javax.xml.bind.annotation.*;
import java.util.List;

@Data
@XmlRootElement(name = "c")
@XmlAccessorType(XmlAccessType.FIELD)
public class CityList {

    @XmlAttribute(name = "c1")
    private String c1;

    @XmlElement(name = "a")
    private String a;

    @XmlElement(name = "b")
    private String b;

    @XmlElement(name = "d")
    private List<City> cityList;
}

  • City.java
package com.stormkai.jaxb;

import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@Data
@XmlRootElement(name = "d")
@XmlAccessorType(XmlAccessType.FIELD)
public class City {

    @XmlAttribute(name = "d1")
    private String cityId;

    @XmlAttribute(name = "d2")
    private String cityName;

    @XmlAttribute(name = "d3")
    private String cityNode;

    @XmlAttribute(name = "d4")
    private String area;
}

JAXBContext类,是应用的入口,用于管理XML/Java绑定信息
Unmarshaller接口,将XML数据反序列化为Java对象
@XmlType,将Java类或枚举类型映射到XML模式类型
@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化

  • PUBLIC_MEMBER :默认值,public权限亦或是具有get/set方法属性
  • FIELD:对象中的所有属性
  • PROPERT:对象中所有具备get/set方法的属性
  • NONE:对象的所有属性都不映射

@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)
@XmlRootElement,将Java类或枚举类型映射到XML元素
@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性

3. 封装的工具类

XmlBuilder.java

package com.stormkai.jaxb;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.Reader;
import java.io.StringReader;

public class XmlBuilder {

    public static <T> T xmlToObj4Jaxb(Class<?> clazz, String xml){
        try {
            T xmlObject;
            Reader reader;
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            reader = new StringReader(xml);
            xmlObject = (T)unmarshaller.unmarshal(reader);
            reader.close();
            return xmlObject;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

4. 测试


public class XmlBuilder {

    public static <T> T xmlToObj4Jaxb(Class<?> clazz, String xml){
        try {
            T xmlObject;
            Reader reader;
            JAXBContext context = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            reader = new StringReader(xml);
            xmlObject = (T)unmarshaller.unmarshal(reader);
            reader.close();
            return xmlObject;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    public String getCityXml1(){
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
                "<c c1=\"0\">\n" +
                "    <a>10</a>\n" +
                "    <b>20</b>\n" +
                "    <d d1=\"101280101\" d2=\"重庆\" d3=\"nanping\" d4=\"南坪\"/>\n" +
                "    <d d1=\"101280102\" d2=\"重庆\" d3=\"yubei\" d4=\"渝北\"/>\n" +
                "    <d d1=\"101280103\" d2=\"重庆\" d3=\"dadukou\" d4=\"大渡口\"/>\n" +
                "</c>";
        return xml;
    }

    public static void main(String[] args) {
        String xml = new XmlBuilder().getCityXml1();
        CityList cityList = xmlToObj4Jaxb(CityList.class, xml);
        System.out.println(JSON.toJSONString(cityList));
    }
}

输出结果:

{"a":"10","b":"20","c1":"0","cityList":[{"area":"南坪","cityId":"101280101","cityName":"重庆","cityNode":"nanping"},{"area":"渝北","cityId":"101280102","cityName":"重庆","cityNode":"yubei"},{"area":"大渡口","cityId":"101280103","cityName":"重庆","cityNode":"dadukou"}]}

Process finished with exit code 0

输出的json格式化后:文章来源地址https://www.toymoban.com/news/detail-731293.html

{
	"a": "10",
	"b": "20",
	"c1": "0",
	"cityList": [{
		"area": "南坪",
		"cityId": "101280101",
		"cityName": "重庆",
		"cityNode": "nanping"
	}, {
		"area": "渝北",
		"cityId": "101280102",
		"cityName": "重庆",
		"cityNode": "yubei"
	}, {
		"area": "大渡口",
		"cityId": "101280103",
		"cityName": "重庆",
		"cityNode": "dadukou"
	}]
}

到了这里,关于使用JAXB将xml转成Java对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java:List<Object>转成对象集合的神技,贼好用

    在开发中,遇到了一个问题,由于是公共查询方法,返回的类型竟然是ListObject,我本地调用之后需要进行对象映射保存数据库,可是怎么转都转不成对象集合,最后发现了一个神技公共方法,贴出来让大家也吃下红利。 公共方法: 调用方法: 大家可以试下,我已经亲自试过

    2024年02月03日
    浏览(41)
  • Java实现对象转成字节数组(整型支持按位写入,字符串则按字节写入)

    闲着无聊,写了一个对象转换成byte[]的工具类,支持整型按位写入(大大节省空间),具体步骤如下: 1. 定义实体类和注解 2. 工具类     3. 测试结果     参考文章: https://www.cnblogs.com/Dotnet9-com/p/17981055

    2024年01月23日
    浏览(36)
  • java--- xml和对象之间的互相转换

    第一种方法是使用 JAXB(Java Architecture for XML Binding) 实现XML与Bean的相互转换 简介 JAXB 是一个业界的标准,是一项可以根据 XML Schema 产生 Java 类的技术。该过程中, JAXB 也提供了将XML实例文档反向生成 Java 对象树的方法,并能将 Java 对象树的内容重新写到  XML 实例文档。 Jaxb

    2024年02月04日
    浏览(68)
  • 【工具】java工具 xml字符串转json对象

    //json字符串

    2024年02月07日
    浏览(32)
  • 【项目学习1】如何将java对象转化为XML字符串

    将java对象转化为XML字符串,可以使用Java的XML操作库JAXB,具体操作步骤如下: 主要分为以下几步: 1、创建JAXBContext对象,用于映射Java类和XML。 2、创建Marshaller对象,用于将Java对象序列化为XML。 3、配置Marshaller参数,例如设置XML输出格式、是否格式化输出等。 4、调用Marsha

    2024年02月14日
    浏览(31)
  • Java调用WebService接口,SOAP协议HTTP请求返回XML对象

    Java调用Web service接口SOAP协议HTTP请求,解析返回的XML字符串: 1. 使用Java的HTTP库发送SOAP请求,并接收返回的响应。 可以使用Java的HttpURLConnection、Apache HttpClient等库。 2. 将返回的响应转换为字符串。 3. 解析XML字符串 ,可以使用Java的DOM解析器或者其他第三方库,如JDOM、DOM4J等。

    2024年01月19日
    浏览(38)
  • 已解决javax.xml.bind.JAXBException: JAXB异常的正确解决方法,亲测有效!!!

    已解决javax.xml.bind.JAXBException: JAXB异常的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 审核类定义 检查注解 验证上下文路径 测试序列化与反序列化 适应环境变化 总结  博主v:XiaoMing_Java javax.xml.bind.JAXBException 是在处理Java对象与XML数据之间的映

    2024年04月22日
    浏览(36)
  • java使用DOM4j解析XML文件

    dom4j是java中的XML API,性能优异、功能强大、开放源代码。 也是所有解析XML文件方法中最常用的! 准备需要j的ar包添加到lib目录下,dom4j-2.1.1.jar(网上随便找一个) 新建项目,在项目下创建info.xml  创建类Test,再使用DOM4j实现对XML文件增删改查 1、获取Document对象 2、展示所有的手机

    2024年02月09日
    浏览(34)
  • [Java]_[初级]_[使用SAX流的方式写入XML文件]

    文件的写入目前没有发现可以增量写入的,只能是完全重新写入。对于大量数据需要写入 XML 文件,还是和读 XML 文件一样,不需要生成 DOM 模型能节省不少的内存和指令。 在 java 标准库里,也是有相关的SAX类来写入数据流, StreamResult(OutputStream) 负责把数据写入输出流。 之后

    2024年02月10日
    浏览(44)
  • JAVA读取文本转成JSON

    要将包含制表符的文本数据转换为JSON格式,你可以使用Java的JSON库,例如Jackson或Gson。以下是一个使用Jackson库将包含制表符的文本数据转换为JSON的示例代码: 如果使用Maven,可以在pom.xml文件中添加以下依赖: ** ** 总结: 在这个例子中,tabSeparatedData变量包含制表符分隔的文

    2024年01月23日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包