Java对象转换成XML
来源:互联网 发布:linux软件仓库 编辑:程序博客网 时间:2024/06/07 22:04
有时候,我们需要把Java对象转换成XML文件。这时可以用JAXB来实现。(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了)、
假如某个公司有许多部门,每个部门有许多职员,我们可以这样来设计简单的bean对象。
@XmlRootElement(name="department") public class Department { private String name; //部门名称 private List<Staff> staffs; // 其实staff是单复同型,这里是加's'是为了区别staff public String getName() { return name; } @XmlAttribute public void setName(String name) { this.name = name; } public List<Staff> getStaffs() {
@XmlRootElement(name="staff") public class Staff { private String name; // 职员名称 private int age; // 职员年龄 private boolean smoker; // 是否为烟民 public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } public boolean isSmoker() { return smoker; } @XmlAttribute public void setSmoker(boolean smoker) { this.smoker = smoker; } }
下面将生成一个简单的对象,并转换成XML字符串。
public class Main { public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception { JAXBContext context = JAXBContext.newInstance(Department.class,Staff.class); // 获取上下文对象 Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象 marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); // 设置编码字符集 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进 marshaller.marshal(getSimpleDepartment(),System.out); // 打印到控制台 ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshaller.marshal(getSimpleDepartment(), baos); String xmlObj = new String(baos.toByteArray()); // 生成XML字符串 System.out.println(xmlObj); } /** * 生成一个简单的Department对象 * @return */ private static Department getSimpleDepartment() { List<Staff> staffs = new ArrayList<Staff>(); Staff stf = new Staff(); stf.setName("周杰伦"); stf.setAge(30); stf.setSmoker(false); staffs.add(stf); stf.setName("周笔畅"); stf.setAge(28); stf.setSmoker(false); staffs.add(stf); stf.setName("周星驰"); stf.setAge(40); stf.setSmoker(true); staffs.add(stf); Department dept = new Department(); dept.setName("娱乐圈"); dept.setStaffs(staffs); return dept; } }
控制台打印信息:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <department name="娱乐圈"> <staff smoker="true"> <age>30</age> <name>周杰伦</name> </staff> <staff smoker="true"> <age>28</age> <name>周笔畅</name> </staff> <staff smoker="true"> <age>40</age> <name>周星驰</name> </staff> </department>
注意到,我们可以用Marshaller.marshal方法将对象转换成xml文件,也可以用UnMarshaller.unmarshal将xml转换成对象。
===============补充理论知识说明========================
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB)
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
JDK中JAXB相关的重要Annotation:(来源于百度百科JAXB)
@XmlType,将Java类或枚举类型映射到XML模式类型
@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
@XmlRootElement,将Java类或枚举类型映射到XML元素。
@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
在以上的注解中,用的最多的是@XMLType,@XmlAccessorType,@XmlRootElement。
- Java对象转换成XML
- Java对象转换成XML
- JAVA对象转换XML
- java xml 转换对象
- 关于xml文件转换成java对象以及java对象转换成xml的工具类
- SAX 解析XML文件:将XML转换成Java对象
- Java对象和XML转换
- java对象转换成xml,javascript对象字符串, xml转换成java对象,支持任意类型,支持深层转换
- JAVA对象转换成XML(<![CDATA[文本内容]]>)
- 96 Android 将XML文件转换成Java对象
- 使用XmlPullParser把xml文件转换成java bean对象
- 使用XStream java对象转换成XML遇到的问题
- 使用xstream将xml转换成java对象
- 使用xStream框架从JavaBean对象转换成XML文档转换成Java对象
- map对象转换成xml
- xml转换成list,,对象转xml
- Java对象和XML之间的转换
- Java对象转换XML文件:XStream+XPP
- codeforces 149D Coloring Brackets
- 杭电 2100 Children’s Queue
- MySQL 数据库规范--开发篇
- ionic splash在iphone6plus和7plus上的显示问题
- Android之四大组件五大布局
- Java对象转换成XML
- Tomcat启用HTTPS协议配置过程
- No 'Access-Control-Allow-Origin' header is present on the requested resource.
- PDO操作数据库时 报错:未选择数据库
- Java简单实训五
- Java概述
- hpu1306 大数a+b和a-b
- 使用工厂模式、策略模式实现BASE64,MD5,SHA,HMAC,DES各种加密算法
- Adaboost(2)——基于Python的adaboost实例