java map to 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

类型参数:

BoundType - JAXB 不知道如何处理的一些类型。编写一个适配器,以便允许通过 ValueType 将此类型用作内存表示形式。

ValueType - JAXB 无需其他操作便知道如何处理的类型。

map转换成xml代码示例

适配器类package hb.jaxb;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import javax.xml.bind.annotation.adapters.XmlAdapter;

//自定义适配器,继承自抽象类XmlAdapter,实现抽象方法marshal和unmarshal

public class MapAdapter extends XmlAdapter {

@Override

public MapEntity[] marshal(Map map) throws Exception {

MapEntity[] list = new MapEntity[map.size()];

Set keyset = map.keySet();

int index =0;

for(Iterator itor=keyset.iterator();itor.hasNext();){

MapEntity item = new MapEntity();

item.key = itor.next();

item.value = map.get(item.key);

list[index++] = item;

}

return list;

}

@Override

public Map unmarshal(MapEntity[] list) throws Exception {

Map map = new HashMap();

for(int i=0;i

MapEntity item = list[i];

map.put(item.key, item.value);

}

return map;

}

}package hb.jaxb;

public class MapEntity{

public Object key;

public Object value;

}

Student.javapackage hb.jaxb;

import java.util.HashMap;

import javax.xml.bind.annotation.XmlRootElement;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlRootElement

public class Student {

private int id;

private String name;

private int age;

@XmlJavaTypeAdapter(MapAdapter.class)

public HashMap getMap() {

return map;

}

public void setMap(HashMap map) {

this.map = map;

}

private HashMap map;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

//无参够着函数一定需要,否则JXBContext无法正常解析。

public Student() {

super();

}

public Student(int id, String name, int age) {

super();

this.id = id;

this.name = name;

this.age = age;

}

}

测试代码@Test

public void mapToXML() {

Student student = new Student(101, "张三", 22);

HashMap map=new HashMap();

map.put("键1", "值1");

map.put("键2", "值2");

student.setMap(map);

try {

JAXBContext context = JAXBContext.newInstance(Student.class);

Marshaller marshaller = context.createMarshaller();

marshaller.marshal(student, System.out);

} catch (JAXBException e) {

e.printStackTrace();

}

}

生成的xml格式

键2

值2

键1

值1

参考文章:

http://blog.csdn.net/lhzjj/article/details/11796713/

http://www.blogjava.net/alwayscy/archive/2007/10/29/156723.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值