使用JAXBContext轻松实现Java和xml的互相转换方式

 更新时间:2021年08月10日 10:11:12   作者:它山之石,可以攻玉  
这篇文章主要介绍了依靠JAXBContext轻松实现Java和xml的互相转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JAXBContext实现Java和xml的互相转换

类文件注解:@XmlRootElement不可缺少

<span style="font-size:14px;">@XmlRootElement  
public class Man {  
    private String name;  
    private int age;
    public Student() {  
        super();  
    } 
    public Student(String name, int age) {  
        super();  
        this.name = name;  
        this.age = age;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getAge() {  
        return age;  
    }  
    public void setAge(int age) {  
        this.age = age;  
    }   
}  </span>

Java 转换 Xml:

@Test  
public void testJava2Xml(){  
    try {  
        JAXBContext jc = JAXBContext.newInstance(Man.class);  
        Marshaller ms = jc.createMarshaller();  
        Man man = new Man("man",100);  
        ms.marshal(man, System.out);  
    } catch (JAXBException e) {  
        e.printStackTrace();  
    }  
}  

Xml 转换 Java:

@Test  
public void testXml2Java() throws JAXBException{  
    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Man><age>100</age><name>man</name></Man>";  
    JAXBContext jc = JAXBContext.newInstance(Man.class);  
    Unmarshaller unmar = jc.createUnmarshaller();  
    Man man = (Man) unmar.unmarshal(new StringReader(xml));  
    System.out.println(man.getName());  
} 

JAXBContext 解析 xml

前提:

package com.sgcc.load.vo;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement(name = "gldxresult")
@XmlAccessorType(XmlAccessType.FIELD)
public class XmlAnalysis { // 泛化, 聚合 
	@XmlElement(name = "success")
	private String success;
	@XmlElement(name = "totalnum")
	private String totalnum; 
 
    @XmlElement(name = "accounts")
    List<Accounts> accounts = new ArrayList<>();
  	
	public List<Accounts> getAccounts() {
		return accounts;
	}
 
	public void setAccounts(List<Accounts> accounts) {
		this.accounts = accounts;
	}
 
	public String getSuccess() {
		return success;
	}
 
	public void setSuccess(String success) {
		this.success = success;
	}
 
	public String getTotalnum() {
		return totalnum;
	}
 
	public void setTotalnum(String totalnum) {
		this.totalnum = totalnum;
	}  
}
package com.sgcc.load.vo; 
import java.util.ArrayList;
import java.util.List; 
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement; 
@SuppressWarnings("serial")
@XmlAccessorType(XmlAccessType.FIELD)
public class Accounts extends ArrayList<Account>{
   
   @XmlElement(name = "account")
   public List<Account> getAccount() {
	        return this;
   }   
}
package com.sgcc.load.vo;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement; 
@XmlAccessorType(XmlAccessType.FIELD)
public class Account {
	@XmlElement(name = "seqid")
	private String seqid;
    @XmlElement(name = "dxid")
    private String dxid;
    @XmlElement(name = "compid")
    private String compid;
    @XmlElement(name = "rspcode")
    private String rspcode;
    @XmlElement(name = "code")
    private String code;
    @XmlElement(name = "name")
    private String name;      
   
	public String getSeqid() {
		return seqid;
	}
	public void setSeqid(String seqid) {
		this.seqid = seqid;
	}
	public String getDxid() {
		return dxid;
	}
	public void setDxid(String dxid) {
		this.dxid = dxid;
	}
	public String getCompid() {
		return compid;
	}
	public void setCompid(String compid) {
		this.compid = compid;
	}
	public String getRspcode() {
		return rspcode;
	}
	public void setRspcode(String rspcode) {
		this.rspcode = rspcode;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}      
}

测试:

package com.sgcc.load.test; 
import java.io.StringReader; 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller; 
import com.sgcc.load.vo.Accounts;
import com.sgcc.load.vo.XmlAnalysis; 
import groovyjarjarcommonscli.ParseException; 
public class Test {
	
	private static XmlAnalysis transToVOs(String webserviceMsg) throws JAXBException, ParseException {
		final StringReader reader = new StringReader(webserviceMsg);
		JAXBContext ctx=JAXBContext.newInstance(new XmlAnalysis().getClass());
		Unmarshaller um=ctx.createUnmarshaller();
		XmlAnalysis ds=(XmlAnalysis)um.unmarshal(reader);		
		return ds;
	}
	public static void main(String[] args) {
		String xmlMsg = "<?xml version=\"1.0\" encoding=\"GBK\"?> \n<gldxresult><success>0</success><totalnum>1</totalnum>"+
"<accounts><yzy>hahaha</yzy><account><seqid></seqid><dxid>1136005118</dxid><compid>0603</compid><rspcode>New0001</rspcode><rspmsg>值:00 没有匹配到分类</rspmsg>"+
"<code>EHBSXPZYFDC000</code><name>哈哈哈哈哈哈哈哈哈</name></account></accounts></gldxresult>";
		
		try{
			XmlAnalysis transToVOs = transToVOs(xmlMsg);
            for(int index = 0;index<transToVOs.getAccounts().get(0).getAccount().size();index++){
    			System.out.println(transToVOs.getAccounts().get(0).getAccount().get(index).getName());
            }
		}catch(Exception e){
			e.printStackTrace();
		}
	}	
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • spring动态注册bean AOP失效原理解析

    spring动态注册bean AOP失效原理解析

    这篇文章主要为大家介绍了spring动态注册bean使AOP失效原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Spring Cloud Netflix架构浅析(小结)

    Spring Cloud Netflix架构浅析(小结)

    这篇文章主要介绍了Spring Cloud Netflix架构浅析(小结),详解的介绍了Spring Cloud Netflix的概念和组件等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • java实现客户信息管理系统

    java实现客户信息管理系统

    这篇文章主要为大家详细介绍了java实现客户信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • mybatis返回的map结果如何设置有序

    mybatis返回的map结果如何设置有序

    这篇文章主要介绍了mybatis返回的map结果如何设置有序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java POI实现将导入Excel文件的示例代码

    Java POI实现将导入Excel文件的示例代码

    这篇文章主要介绍了Java POI实现将导入Excel文件的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 深入解析Java中volatile的底层原理

    深入解析Java中volatile的底层原理

    这篇文章主要介绍了深入解析Java中volatile的底层原理,volatile关键字用于保证变量的可见性和禁止指令重排序,即当一个线程修改了volatile变量的值,其他线程能够立即看到这个变量的最新值,而不是使用缓存中的旧值,需要的朋友可以参考下
    2023-07-07
  • Java无法获取真实IP解决方案

    Java无法获取真实IP解决方案

    这篇文章主要介绍了Java无法获取真实IP解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java中Stream流去除List重复元素的方法

    Java中Stream流去除List重复元素的方法

    这篇文章主要为大家详细介绍了Java中Stream流去除List重复元素的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Spring事务处理原理步骤详解

    Spring事务处理原理步骤详解

    这篇文章主要介绍了Spring事务处理原理步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java多条件判断场景中规则执行器的设计

    Java多条件判断场景中规则执行器的设计

    近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。本文去掉if 判断,试试用一个规则执行器来替代它,感兴趣的可以了解一下
    2021-06-06

最新评论