JAXB解析生成xml
来源:互联网 发布:sql查询去掉重复行 编辑:程序博客网 时间:2024/05/16 08:50
1、简介
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。JAXB 已经是jdk的组成部分,不需要另外引入jar包
2、几个核心注解
(1)@XmlRootElement(name = "response") 将Java类或枚举类型映射到XML元素。
(2) @XmlElement(name = "result") 将Java类的一个属性映射到与属性同名的一个XML元素。
(3) @XmlAttribute(name="code") 将Java类的一个属性映射到与属性同名的一个XML属性。
(4) @XmlValue(name="result") 将Java类的一个属性映射到XML元素之间的值上(例:<result code="0">成功</result> 0的获取是(3)成功的获取是4)
3、具体实例
以一个比较复杂,并且可以涵盖大部分内容的例子(代码较多,可以直接拷贝到自己工程中使用):
工具类
import java.io.StringReader;import java.io.StringWriter;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;/** * jaxb工具类 */public class JaxbUtil { // 多线程安全的Context. private JAXBContext jaxbContext; /** * @param types * 所有需要序列化的Root对象的类型. */ public JaxbUtil(Class<?>... types) { try { jaxbContext = JAXBContext.newInstance(types); } catch (JAXBException e) { throw new RuntimeException(e); } } /** * 对象转xml */ public String toXml(Object root, String encoding) { try { StringWriter writer = new StringWriter(); createMarshaller(encoding).marshal(root, writer); return writer.toString(); } catch (JAXBException e) { throw new RuntimeException(e); } } /** * xml转对象 */ @SuppressWarnings("unchecked") public <T> T fromXml(String xml) { try { StringReader reader = new StringReader(xml); return (T) createUnmarshaller().unmarshal(reader); } catch (JAXBException e) { throw new RuntimeException(e); } } /** * 创建Marshaller, 设定encoding(可为Null). */ public Marshaller createMarshaller(String encoding) { try { Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); if (!encoding.equals("") && encoding!=null) { marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); } return marshaller; } catch (JAXBException e) { throw new RuntimeException(e); } } /** * 创建UnMarshaller. */ public Unmarshaller createUnmarshaller() { try { return jaxbContext.createUnmarshaller(); } catch (JAXBException e) { throw new RuntimeException(e); } } }
具体对象(多个):
import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlValue;/** * * 获取组织结构xml对象 */@XmlRootElement(name = "response")public class GetOrgResponse{ Result result; Message message; public Result getResult() { return result; } @XmlElement(name = "result") public void setResult(Result result) { this.result = result; } public Message getMessage() { return message; } @XmlElement(name = "message") public void setMessage(Message message) { this.message = message; } @XmlRootElement(name = "message") public static class Message { Company company; public Company getCompany() { return company; } @XmlElement(name = "company") public void setCompany(Company company) { this.company = company; } } @XmlRootElement(name = "result") public static class Result { String code; String result; public String getCode() { return code; } @XmlAttribute public void setCode(String code) { this.code = code; } public String getResult() { return result; } @XmlValue public void setResult(String result) { this.result = result; } }}
import java.util.List;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;/** * 企业信息xml对象 */@XmlRootElement(name = "company")public class Company{ String id; String name; String enter_id; String ver; String short_name; String privacy; List<Member> members; List<Department> departments; public String getId() { return id; } @XmlAttribute(name = "id") public void setId(String id) { this.id = id; } public String getName() { return name; } @XmlAttribute(name = "name") public void setName(String name) { this.name = name; } public String getEnter_id() { return enter_id; } @XmlAttribute(name = "enter_id") public void setEnter_id(String enter_id) { this.enter_id = enter_id; } public String getVer() { return ver; } @XmlAttribute(name = "ver") public void setVer(String ver) { this.ver = ver; } public String getShort_name() { return short_name; } @XmlAttribute(name = "short_name") public void setShort_name(String short_name) { this.short_name = short_name; } public String getPrivacy() { return privacy; } @XmlAttribute(name = "privacy") public void setPrivacy(String privacy) { this.privacy = privacy; } public List<Member> getMembers() { return members; } @XmlElement(name = "member") public void setMembers(List<Member> members) { this.members = members; } public List<Department> getDepartments() { return departments; } @XmlElement(name = "dep") public void setDepartments(List<Department> departments) { this.departments = departments; }}
import java.util.List;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;/** * 部门xml对象 */@XmlRootElement(name = "dep")public class Department{ String id; String name; String clan_order; List<Member> members; List<Department> departments; public String getId() { return id; } @XmlAttribute(name = "id") public void setId(String id) { this.id = id; } public String getName() { return name; } @XmlAttribute(name = "name") public void setName(String name) { this.name = name; } public String getClan_order() { return clan_order; } @XmlAttribute(name = "clan_order") public void setClan_order(String clan_order) { this.clan_order = clan_order; } public List<Member> getMembers() { return members; } @XmlElement(name = "member") public void setMembers(List<Member> members) { this.members = members; } public List<Department> getDepartments() { return departments; } @XmlElement(name = "dep") public void setDepartments(List<Department> departments) { this.departments = departments; } }
import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlRootElement;/** * 组织结构中成员对象 */@XmlRootElement(name = "member")public class Member{ String name; String nbr; String sex; String ext; String sort_no; String login_name; String pic_url; String headship; public String getName() { return name; } @XmlAttribute(name = "name") public void setName(String name) { this.name = name; } public String getNbr() { return nbr; } @XmlAttribute(name = "nbr") public void setNbr(String nbr) { this.nbr = nbr; } public String getSex() { return sex; } @XmlAttribute(name = "sex") public void setSex(String sex) { this.sex = sex; } public String getExt() { return ext; } @XmlAttribute(name = "ext") public void setExt(String ext) { this.ext = ext; } public String getSort_no() { return sort_no; } @XmlAttribute(name = "sort_no") public void setSort_no(String sort_no) { this.sort_no = sort_no; } public String getLogin_name() { return login_name; } @XmlAttribute(name = "login_name") public void setLogin_name(String login_name) { this.login_name = login_name; } public String getPic_url() { return pic_url; } @XmlAttribute(name = "pic_url") public void setPic_url(String pic_url) { this.pic_url = pic_url; } public String getHeadship() { return headship; } @XmlAttribute(name = "headship") public void setHeadship(String headship) { this.headship = headship; }}
测试:
public class Test{ public static void main(String[] args) throws Exception { JaxbUtil resultBinder = new JaxbUtil(GetOrgResponse.class); String xml = "<response type='orgService' subtype='orgService' msid='sssss'>" + "<result code='0'>成功</result>" + "<message> <company id='312003' name='xx测试' enter_id='237525' ver='3' short_name='xx测试' privacy='0'>" + "<member name='张三' nbr='67123675' sex='1' ext='' sort_no='100' login_name='admin' pic_url='111.png' headship=''/>" + "<dep id='312004' name='总经办' clan_order='1'></dep>" + "<dep id='312005' name='研发部' clan_order='2'>" + "<member name='李四' nbr='66406993' sex='1' ext='' sort_no='100' login_name='18013399396' pic_url='222.png' headship=''/>" + "<dep id='312012' name='研发一部' clan_order='201'></dep>" + "<dep id='312013' name='研发二部' clan_order='202'></dep>" + "</dep></company></message></response>"; GetOrgResponse res = resultBinder.fromXml(xml); System.out.println(res.getResult().getCode()); System.out.println(res.getResult().getResult()); System.out.println(res.getMessage().getCompany().getName()); System.out.println(res.getMessage().getCompany().getEnter_id()); System.out.println(res.getMessage().getCompany().getVer()); if (res.getMessage().getCompany().getMembers() != null) { for (Member member : res.getMessage().getCompany().getMembers()) { System.out.println(member.getNbr() + "=" + member.getName() + "=" + member.getPic_url()); } } if (res.getMessage().getCompany().getDepartments() != null) { for (Department dep : res.getMessage().getCompany().getDepartments()) { System.out.println(dep.getId() + "=" + dep.getName()); } } if (res.getMessage().getCompany().getMembers() != null) { for (Member member : res.getMessage().getCompany().getMembers()) { System.out.println(member.getNbr() + "=" + member.getName() + "=" + member.getPic_url()); } } }}代码下载地址
4、遇到的小问题(注意事项)
(1)属性节点有下划线时必须这么写@XmlAttribute(name = "parentDepId")
如果只写@XmlAttribute将获取不到带下划线属性或者节点的值
(2)如果不想要某个属性或者节点,将此属性设为null即可
在使用jaxb从bean转换为xml过程中,默认会将bean中属性为null的属性过滤掉
0 0
- JAXB解析生成xml
- jaxb xml生成与解析
- JAXB生成xml
- Java JAXB 生成xml
- JAXB解析xml
- JAXB解析XML
- JAXB解析xml
- JAXB解析XML
- JAXB解析xml
- jaxb解析xml
- JAXB解析xml实例
- JAXB解析xml
- JAXB解析XML
- JAXB解析xml
- jaxb解析xml
- JAXB解析XML
- JAXB解析XML文件
- jaxb解析xml
- 大型网站技术:基础架构演进与实践
- IK分词使用示例
- Watson Explorer 入门(5):配置内容分析工作室(Studio)
- 记一次synchronized锁字符串引发的坑兼再谈Java字符串
- phpexcel乱码解决
- JAXB解析生成xml
- webpack入门指南
- python脚本编程:批量对比文本文件,根据具体字段比较差异
- 填充正方形
- eclipse的Server中没有tomcat选项的解决安装方法
- eclipse快速定位到错误处
- iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
- vs2012快捷键总结
- Managing DNS zone files with dnspython