这篇文章主要介绍了如何使用JAXBContext实现Java和xml的互相转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
JAXBContext实现Java和xml的互相转换
类文件注解:@XmlRootElement不可缺少
<span >@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();}}}
感谢你能够认真阅读完这篇文章,希望小编分享的“如何使用JAXBContext实现Java和xml的互相转换”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!