xml转为java

mac2025-09-16  4

xml转为java

基本语法@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)@XmlAttribute(name="name")@XmlElementWrapper(name="list") 例子一例子二

基本语法

@XmlRootElement

xml的根节点

@XmlAccessorType(XmlAccessType.FIELD)

在一个类的上面使用表明这个类的字段都是xml节点 前提是字段的名称要与 xml的节点的名称要一致 如果不一致 要使用@XmlElement(name=“name”)

@XmlAttribute(name=“name”)

xml节点属性的名称详看下方例子

@XmlElementWrapper(name=“list”)

详见下方的例子中使用

例子一

StringBuilder xml = new StringBuilder(); xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); xml.append("<boys>"); xml.append(" <boy id=\"1\">"); xml.append(" <name>Paul</name>"); xml.append(" </boy>"); xml.append(" <boy id=\"2\">"); xml.append(" <name>Jack</name>"); xml.append(" </boy>"); xml.append("</boys>"); JAXBContext context = JAXBContext.newInstance(Boys.class); Unmarshaller unmarshaller = context.createUnmarshaller(); StringReader reader = new StringReader(xml.toString()); Object obj = unmarshaller.unmarshal(reader); Boys boys = (Boys) obj; System.out.println(String.format("boys_size=%s", boys.getBoy().size())); boys.getBoy().stream().forEach(item->{ System.out.println(String.format("the boy id=%s name=%s",item.getId(),item.getName())); });

Boys.java

import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.util.HashSet; import java.util.Set; @XmlRootElement(name = "boys") @XmlAccessorType(XmlAccessType.FIELD) public class Boys { private Set<Boy> boy = new HashSet<>(); //也可以使用List做集合 //private List<Boy> boy = new ArrayList<Boy>(); //set and get method public Set<Boy> getBoy() { return boy; } public void setBoy(Set<Boy> boy) { this.boy = boy; } }

Boy.java

import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; @XmlAccessorType(XmlAccessType.FIELD)//就不用在每一个字段上都标注@XmlElement(name = "xxx") public class Boy { @XmlAttribute(name = "id") private String id; private String name; //set and get method public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } }

例子二

把要转化成Model类传入进newInstance()里

package com.qbsea.xmlconvertor; import com.qbsea.xmlconvertor.model.CmCore; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.StringReader; public class XmlConvertor { public static JAXBContext context; public static Unmarshaller unmarshaller; static { try { context = JAXBContext.newInstance(CmCore.class); unmarshaller = context.createUnmarshaller(); } catch (JAXBException e) { e.printStackTrace(); } } public static <T> T getEntity(String xmlStr,Class<T> resultClass) { StringReader reader = new StringReader(xmlStr); try { Object obj = unmarshaller.unmarshal(reader); return (T)obj; } catch (JAXBException ex) { ex.printStackTrace(); return null; } } }

调用入口 参考XML报文

<?xml version="1.0" encoding="UTF-8"?> <CMCORE xmlns="http://www.cm-inv.com/CMINV/2015/10"> <CMAPI0008Rs> <CommonRsHdr> <StatusCode>0000</StatusCode> <ServerStatusCode>Success</ServerStatusCode> <SPRsUID>7832</SPRsUID> <RqUID>b2ebd12a-136b-43wb-s3a1-d9114c481ac2</RqUID> </CommonRsHdr> <list> <cardDef> <bindingName>name1</bindingName> <bindingCardNo>cardNo1</bindingCardNo> <bindingBank>bank1</bindingBank> <bindingStatus>status01</bindingStatus> <custId>custId001</custId> <bankCode>001</bankCode> <reservePhone>15011111111</reservePhone> </cardDef> <cardDef> <bindingName>name2</bindingName> <bindingCardNo>cardNo2</bindingCardNo> <bindingBank>bank2</bindingBank> <bindingStatus>status02</bindingStatus> <custId>custId002</custId> <bankCode>002</bankCode> <reservePhone>15011111112</reservePhone> </cardDef> </list> </CMAPI0008Rs> </CMCORE>

xml 对应的实体类 package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.cm-inv.com/CMINV/2015/10", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package com.qbsea.xmlconvertor.model;

CmCore.java

package com.qbsea.xmlconvertor.model; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; @XmlRootElement(name = "CMCORE") public class CmCore implements Serializable { private Cmapi0008rs cmapi0008rs;//绑卡查询结果 @XmlElement(name = "CMAPI0008Rs") public Cmapi0008rs getCmapi0008rs() { return cmapi0008rs; } public void setCmapi0008rs(Cmapi0008rs cmapi0008rs) { this.cmapi0008rs = cmapi0008rs; } }

CommonRsHdr.java

package com.qbsea.xmlconvertor.model; import javax.xml.bind.annotation.XmlElement; import java.io.Serializable; public class CommonRsHdr implements Serializable{ private String statusCode; private String serverStatusCode; private String sPRsUID; private String rqUID; //set and get method @XmlElement(name = "StatusCode") public String getStatusCode() { return statusCode; } public void setStatusCode(String statusCode) { this.statusCode = statusCode; } @XmlElement(name = "ServerStatusCode") public String getServerStatusCode() { return serverStatusCode; } public void setServerStatusCode(String serverStatusCode) { this.serverStatusCode = serverStatusCode; } @XmlElement(name = "SPRsUID") public String getsPRsUID() { return sPRsUID; } public void setsPRsUID(String sPRsUID) { this.sPRsUID = sPRsUID; } @XmlElement(name = "RqUID") public String getRqUID() { return rqUID; } public void setRqUID(String rqUID) { this.rqUID = rqUID; } }

Cmapi0008rs.java

package com.qbsea.xmlconvertor.model; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import java.io.Serializable; import java.util.List; public class Cmapi0008rs implements Serializable { private CommonRsHdr commonRsHdr; private List<CardDef> cardDefList; @XmlElement(name = "CommonRsHdr") public CommonRsHdr getCommonRsHdr() { return commonRsHdr; } public void setCommonRsHdr(CommonRsHdr commonRsHdr) { this.commonRsHdr = commonRsHdr; } @XmlElementWrapper(name="list") @XmlElement(name="cardDef") public List<CardDef> getCardDefList() { return cardDefList; } public void setCardDefList(List<CardDef> cardDefList) { this.cardDefList = cardDefList; } }

CardDef.java

package com.qbsea.xmlconvertor.model; import javax.xml.bind.annotation.XmlElement; import java.io.Serializable; public class CardDef implements Serializable{ private String bindingName; private String bindingCardNo; private String bindingBank ; private String bindingStatus ; private String custId ; private String bankCode ; private String reservePhone ; private String cityCode ; private String cityName ; private String provCode ; private String provName; private String mainFlag; private String binddingtime; //set and get method @XmlElement(name = "bindingName") public String getBindingName() { return bindingName; } public void setBindingName(String bindingName) { this.bindingName = bindingName; } @XmlElement(name = "bindingCardNo") public String getBindingCardNo() { return bindingCardNo; } public void setBindingCardNo(String bindingCardNo) { this.bindingCardNo = bindingCardNo; } @XmlElement(name = "bindingBank") public String getBindingBank() { return bindingBank; } public void setBindingBank(String bindingBank) { this.bindingBank = bindingBank; } @XmlElement(name = "bindingStatus") public String getBindingStatus() { return bindingStatus; } public void setBindingStatus(String bindingStatus) { this.bindingStatus = bindingStatus; } @XmlElement(name = "custId") public String getCustId() { return custId; } public void setCustId(String custId) { this.custId = custId; } @XmlElement(name = "bankCode") public String getBankCode() { return bankCode; } public void setBankCode(String bankCode) { this.bankCode = bankCode; } @XmlElement(name = "reservePhone") public String getReservePhone() { return reservePhone; } public void setReservePhone(String reservePhone) { this.reservePhone = reservePhone; } @XmlElement(name = "cityCode") public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } @XmlElement(name = "cityName") public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } @XmlElement(name = "provCode") public String getProvCode() { return provCode; } public void setProvCode(String provCode) { this.provCode = provCode; } @XmlElement(name = "provName") public String getProvName() { return provName; } public void setProvName(String provName) { this.provName = provName; } @XmlElement(name = "mainFlag") public String getMainFlag() { return mainFlag; } public void setMainFlag(String mainFlag) { this.mainFlag = mainFlag; } @XmlElement(name = "binddingtime") public String getBinddingtime() { return binddingtime; } public void setBinddingtime(String binddingtime) { this.binddingtime = binddingtime; } }
最新回复(0)