map对象转换成xml

1. @XmlAccessorOrder.UNDEFINEDXmlAccessorOrder.UNDEFINED无序
@XmlAccessorOrder.ALPHABETICAL是指按属性的字母顺序排序。


2. @XmlType的propOrder 属性时,必须列出JavaBean对象中的所有属性,否则会报错
@XmlType(propOrder = { "id","name","age","book"})指定输出顺序

3. @XmlAccessorType用于指定由java对象生成xml文件时对java对象属性的访问方式。

常与@XmlRootElement、@XmlType一起使用。它的属性值是XmlAccesstype的4个枚举值

分别为:
XmlAccesstype.FIELD:java对象中的所有成员变量
XmlAccesstype.PROPERTY:java对象中所有通过getter/setter方式访问的成员变量
XmlAccesstype.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量
XmlAccesstype.NONE:java对象的所有属性都不映射为xml的元素

注意:@XmlAccessorType的认访问级别是XmlAccesstype.PUBLIC_MEMBER,
因此,如果java对象中的private成员变量设置了public权限的getter/setter方法,就不要在private变量上使用@XmlElement和@XmlAttribute注解,
只能在getter/setter方法上使用@XmlElement和@XmlAttribute注解,
否则由java对象生成xml时会报同一个属性java类里存在两次的错误
同理,如果@XmlAccessorType的访问权限为XmlAccesstype.NONE,如果在java的成员变量上使用了


4. @XmlElement或@XmlAttribute注解,这些成员变量依然可以映射到xml文件

5. @XmlTransient用于标示在由java对象映射xml时,忽略此属性,在生成的xml文件中不出现此元素。

6. @XmlAttribute:该属性作为类xml节点的attribute

7. @XmlElement:该属性作为xml的element,且可以增加属性(name="NewElementName"),那么生成的xml串的elment的标签是NewElementName


8. @XmlJavaTypeAdapter
JAXB能够内置支持List和Set集合,但是对于Map支持需要自己处理。
继承自抽象类XmlAdapter<ValueType,BoundType>
类型参数:
BoundType - JAXB 不知道如何处理的一些类型。编写一个适配器,以便允许通过 ValueType 将此类型用作内存表示形式。
ValueType - JAXB 无需其他操作便知道如何处理的类型。



map转换成xml代码示例

适配器类

packagehb.jaxb;

importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;
importjava.util.Set;

importjavax.xml.bind.annotation.adapters.XmlAdapter;

//自定义适配器,继承自抽象类XmlAdapter,实现抽象方法marshal和unmarshal
publicclassMapAdapterextendsXmlAdapter<MapEntity[],Map>{

@Override
publicMapEntity[]marshal(Mapmap)throwsException{

MapEntity[]list=newMapEntity[map.size()];
Setkeyset=map.keySet();
intindex=0;
for(Iteratoritor=keyset.iterator();itor.hasNext();){
MapEntityitem=newMapEntity();
item.key=itor.next();
item.value=map.get(item.key);
list[index++]=item;
}
returnlist;
}

@Override
publicMapunmarshal(MapEntity[]list)throwsException{

Mapmap=newHashMap();
for(inti=0;i<list.length;i++){
MapEntityitem=list[i];
map.put(item.key,item.value);
}

returnmap;

}

}
packagehb.jaxb;


publicclassMapEntity{
publicObjectkey;
publicObjectvalue;
}


Student.java

packagehb.jaxb;

importjava.util.HashMap;

importjavax.xml.bind.annotation.XmlRootElement;
importjavax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlRootElement
publicclassstudent{
privateintid;
privateStringname;
privateintage;



@XmlJavaTypeAdapter(MapAdapter.class)
publicHashMap<String,String>getMap(){
returnmap;
}

publicvoidsetMap(HashMap<String,String>map){
this.map=map;
}

privateHashMap<String,String>map;

publicintgetId(){
returnid;
}

publicvoidsetId(intid){
this.id=id;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intage){
this.age=age;
}
//无参够着函数一定需要,否则JXBContext无法正常解析。
publicStudent(){
super();
}

publicStudent(intid,Stringname,intage){
super();
this.id=id;
this.name=name;
this.age=age;
}
}



测试代码

@Test
publicvoidmapToXML(){

Studentstudent=newStudent(101,"张三",22);
HashMap<String,String>map=newHashMap<String,String>();
map.put("键1","值1");
map.put("键2","值2");
student.setMap(map);
try{
JAXBContextcontext=JAXBContext.newInstance(Student.class);
Marshallermarshaller=context.createMarshaller();
marshaller.marshal(student,System.out);
}catch(JAXBExceptione){
e.printstacktrace();
}

}


生成的xml格式

<map>
<item>
<key>键2</key>
<value>值2</value>
</item>
<item>
<key>键1</key>
<value>值1</value>
</item>
</map>

参考文章:http://blog.csdn.net/lhzjj/article/details/11796713/http://www.blogjava.net/alwayscy/archive/2007/10/29/156723.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇