map对象转换成xml

前端之家收集整理的这篇文章主要介绍了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

猜你在找的XML相关文章