JAXB学习笔记(六)(一)

2014-11-24 02:57:45 · 作者: · 浏览: 2

上节中所说的最终xml格式,

Xml代码
< xml version="1.0" encoding="UTF-8" standalone="yes" >

112
就不告诉你
2011-09-28


聪明的读者应该自己就会实现了,通过集合+属性值的方式就ok了,看代码
Java代码
package cn.uyunsky.blog.xml.demo6;

import java.io.StringReader;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
*

属性+集合 实现非正常思维的xml


*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Persion {

@XmlElement(name = "filed")
private List infos;

public List getInfos() {
return infos;
}

public void setInfos(List infos) {
this.infos = infos;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Persion [infos=");
builder.append(infos);
builder.append("]");
return builder.toString();
}

public static void main(String[] args) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Persion.class);
Persion persion = new Persion();

List infos = new ArrayList();

DemoField userid = new DemoField();
userid.setName("userid");
userid.setValue("112");
infos.add(userid);

DemoField username = new DemoField();
username.setName("username");
username.setValue("就不告诉你");
infos.add(username);

DemoField birthday = new DemoField();
birthday.setName("birthday");
birthday.setValue(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
infos.add(birthday);

persion.setInfos(infos);

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

StringWriter writer = new StringWriter();
marshaller.marshal(persion, writer);
String xml = writer.getBuffer().toString();
System.out.println(xml);

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object bean = unmarshaller.unmarshal(new StringReader(xml));
System.out.println(bean);

} catch (JAXBException e) {
e.printStackTrace();
}
}

}

DemoField对象
Java代码
package cn.uyunsky.blog.xml.demo6;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlValue;

@XmlAccessorType(XmlAccessType.FIELD)
public class DemoField {

@XmlAttribute
private String name;

@XmlValue
private String value;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getValue() {
return value;
}

public void s