Java开发中xml和javabean实体类之间的相互转换
目录
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\"", "");
}