Java开发中xml和javabean实体类之间的相互转换

Java开发中xml和javabean实体类之间的相互转换

目录

Java开发中xml和javabean实体类之间的相互转换

1.xml转javabean

1.1 xml格式如下,只有一层的:

1.2有两层的xml,

2.vo转xml


1.xml转javabean

1.1 xml格式如下,只有一层的:

<?xml version='1.0' encoding='UTF-8'?>
<root>
<company>10000</company>
<descr>公司</descr>
<descrshort>公司简称</descrshort>
<country>国家</country>
<phone>电话</phone>
<fax>传真</fax>
<address_code>邮编</address_code>
<address_descr>注册地址</address_descr>
<spg_legal>公司法人</spg_legal>
<comemail>邮箱</comemail>
</root>

在实体类名上加注释:

@XmlRootElement(name = "root")

调用:

MdmCorpVoList tmpRresvo = (MdmCorpVoList)getXmlUtil().convertXmlStrToObject(MdmCorpVoList.class, xml);

 

/** 
     * 将String类型的xml转换成对象 
     */  
    public  Object convertXmlStrToObject(Class clazz, String xmlStr) {  
        Object xmlObject = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(clazz);  
            // 进行将Xml转成对象的核心接口  
            Unmarshaller unmarshaller = context.createUnmarshaller();  
            StringReader sr = new StringReader(xmlStr);  
            xmlObject = unmarshaller.unmarshal(sr);  
            
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return xmlObject;  
    }

1.2有两层的xml,

如下:

<?xml version='1.0' encoding='UTF-8'?>
<root>
<line>
<company>10000</company>
<descr>公司</descr>
<descrshort>公司简称</descrshort>
<country>国家</country>
<phone>电话</phone>
<fax>传真</fax>
<address_code>邮编</address_code>
<address_descr>注册地址</address_descr>
<spg_legal>公司法人</spg_legal>
<comemail>邮箱</comemail>
</line>
</root>

1.2.1建立两个vo类:

第一个:

@XmlAccessorType(XmlAccessType.FIELD)
public class MdmCorpVo {
实体属性
get
set方法
}

第二个:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "root")
@XmlType(propOrder = {})
public class MdmCorpVoList {

	@XmlElement(name = "line")
	private List<MdmCorpVo> listCorpVo;

	public List<MdmCorpVo> getListCorpVo() {
		return listCorpVo;
	}

	public void setListCorpVo(List<MdmCorpVo> listCorpVo) {
		this.listCorpVo = listCorpVo;
	}
	
	
}

再使用方法1.1中的调用就好了,注意这个转化只能xml和vo一一对应

2.vo转xml

xml格式如下:也有两层:

<?xml version='1.0' encoding='UTF-8'?>
<root>
<head>
<success>1</success>
<errcode></errcode>
<message></message>
</head>
</root>

 

实体类1:

@javax.xml.bind.annotation.XmlRootElement(name="root")
public class ReturnMdmVo {

	private  String success;
	
	private  String errcode;
	
	private  String message;
get
set方法
}

 

实体类2:

@XmlRootElement(name="root")
public class ReturnMdmVoList {

	private List<ReturnMdmVo>  returnMdmVolist;

//	@XmlElementWrapper(name = "head")
	@XmlElement(name = "head")
	public List<ReturnMdmVo> getReturnMdmVolist() {
		return returnMdmVolist;
	}


	public void setReturnMdmVolist(List<ReturnMdmVo> returnMdmVolist) {
		this.returnMdmVolist = returnMdmVolist;
	}
	
}

 

调用:

ReturnMdmVoList listVo=new ReturnMdmVoList();
		List<ReturnMdmVo>  returnMdmVolist=new ArrayList<ReturnMdmVo>();
		returnMdmVolist.add(resVo);
		listVo.setReturnMdmVolist(returnMdmVolist);
		String result=getXmlUtil().convertToXml(listVo);
/** 
     * 将对象直接转换成String类型的 XML输出 
     *  
     * @param obj 
     * @return 
     */  
    public  String convertToXml(Object obj) {  
        // 创建输出流  
        StringWriter sw = new StringWriter();  
        try {  
            // 利用jdk中自带的转换类实现  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  
  
            Marshaller marshaller = context.createMarshaller();  
            // 格式化xml输出的格式  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  
                    Boolean.TRUE);  
            // 将对象转换成输出流形式的xml  
            marshaller.marshal(obj, sw);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return sw.toString().replace("standalone=\"yes\"", "");  
    } 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值