JAXB 实现java对象与xml之间互相转换
来源:互联网 发布:使用动态规划的算法 编辑:程序博客网 时间:2024/05/16 17:11
利用Marshaller和unMarshaller可在java的object对象和xml之间实现转换
首先创建一个简单的Boy对象
其中@XmlRootElement(name="Root")表明xml的根元素,(name="Root")这个是重新定义xml文件的跟元素,如果没有此name定义,则xml根元素默认跟对象名一致
然后通过Marshaller类实现将对象转换为xml,同时也可利用Unmarshaller类进行xml和类之间的转换
最后转换打印结果
----------marshaller--------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Root><name>aa</name></Root>
----------unMarshaller--------------
aa
上面介绍的对象boy中只包含简单属性,如果boy中还包含其他对象该做如何处理呢?
此时的boy对象中包含了Address对象,所以此时boy对象中的getAddress()须设置adapter,
创建AddressAdapter类,继承XmlAdapter<ValueType,BoundType>
此时即可进行java对象转换为xml
最后打印结果为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Root><address>BeiJing</address><name>aa</name></Root>
首先创建一个简单的Boy对象
@XmlRootElement(name="Root") @XmlAccessorType(XmlAccessType.PROPERTY) public class Boy { private String name = "aa"; public String getName() { return name; } public void setName(String name) { this.name = name; } }
其中@XmlRootElement(name="Root")表明xml的根元素,(name="Root")这个是重新定义xml文件的跟元素,如果没有此name定义,则xml根元素默认跟对象名一致
然后通过Marshaller类实现将对象转换为xml,同时也可利用Unmarshaller类进行xml和类之间的转换
public class JAXBTest { public static void main(String[] args) throws JAXBException { JAXBContext context = JAXBContext.newInstance(Boy.class); Marshaller marshaller = context.createMarshaller(); Unmarshaller unMarshaller = context.createUnmarshaller(); System.out.println("----------marshaller--------------"); Boy boy = new Boy(); marshaller.marshal(boy, System.out); System.out.println("\n----------unMarshaller--------------"); //将xml转换为对应的java对象 String xml = "<Root><name>aa</name></Root>";//此处标签名称须和boy对象的属性一致 Boy b = (Boy) unMarshaller.unmarshal(new StringReader(xml)); System.out.println(b.getName()); } }
最后转换打印结果
----------marshaller--------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Root><name>aa</name></Root>
----------unMarshaller--------------
aa
上面介绍的对象boy中只包含简单属性,如果boy中还包含其他对象该做如何处理呢?
@XmlRootElement(name="Root") @XmlAccessorType(XmlAccessType.PROPERTY) public class Boy { private String name = "aa"; private Address address; public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlJavaTypeAdapter(AddressAdapter.class) public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
public class Address { private String address; public void setAddress(String address) { this.address = address; } public String getAddress() { return address; } }
此时的boy对象中包含了Address对象,所以此时boy对象中的getAddress()须设置adapter,
创建AddressAdapter类,继承XmlAdapter<ValueType,BoundType>
public class AddressAdapter extends XmlAdapter<String, Address> { @Override public Address unmarshal(String v) throws Exception { AddressImpl address = new AddressImpl(); address.setAddress(v); return address; } @Override public String marshal(Address v) throws Exception { return v.getAddress(); } }
此时即可进行java对象转换为xml
public class JAXBTest { public static void main(String[] args) throws JAXBException { JAXBContext context = JAXBContext.newInstance(Boy.class); Marshaller marshaller = context.createMarshaller(); System.out.println("----------marshaller--------------"); Boy boy = new Boy(); AddressImpl address = new AddressImpl(); address.setAddress("BeiJing"); boy.setAddress(address); marshaller.marshal(boy, System.out); } }
最后打印结果为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Root><address>BeiJing</address><name>aa</name></Root>
0 0
- JAXB 实现java对象与xml之间互相转换(一)
- JAXB 实现java对象与xml之间互相转换(二)
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- JAXB 实现java对象与xml之间互相转换
- Jaxb实现Java对象与XML之间的转换
- JAXB实现JAVA对象和XML字符串的互相转换
- java 中jaxb实现对象到xml互相转换
- JAXB实现JavaBean与XML互相转换
- xml-xml与java对象之间的转换(jaxb)
- JAXB 对象与XML之间转换
- java对象和xml之间转换--Jaxb
- JAXB实现JAVA BEAN与XML之间的转换
- hibernate的clear作用-set之后修改了数据库数据
- ViewPage+fragment
- 进程和线程的区别
- Cocos2dx-lua制作遮罩
- 1-Haar特征的特点及计算
- JAXB 实现java对象与xml之间互相转换
- Lua Math库
- TableViewCell自定义分割线
- CSS使用技巧
- linux中shell变量$#,$@,$0,$1,$2的含义解释
- 计算两个GPS坐标的距离 方法二 - C语言
- Swift for 的几个例子
- 使用struts2标签上传用户头像(一)
- STM32F103RBT6 定时器 Timer2 源程序