XML的操作——JAXB进行Java对象和XML之间的转换-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

XML的操作——JAXB进行Java对象和XML之间的转换

简介: JAXB(Java Architecture for XML Binding)是一种特殊的序列化/反序列化工具,可实现Java对象与XML的相互转换。 在JAXB中将一个Java对象——>XML的过程称之为Marshal,XML——>Java对象的过程称之为UnMarshal。 @XmlRootElement public class SClass {private S
JAXB(Java Architecture for XML Binding)是一种特殊的序列化/反序列化工具,可实现Java对象与XML的相互转换。
在JAXB中将一个Java对象——>XML的过程称之为Marshal,XML——>Java对象的过程称之为UnMarshal。

@XmlRootElement
public class SClass
{
private String cnum;
private List<Student> students;
public SClass()
{
super();
}

public SClass(String cnum, List<Student> students)
{
super();
this.cnum = cnum;
this.students = students;
}

public String getCnum()
{
return cnum;
}
public void setCnum(String cnum)
{
this.cnum = cnum;
}
public List<Student> getStudents()
{
return students;
}
public void setStudents(List<Student> students)
{
this.students = students;
}
}


public class Student
{
private String num;
private String name;

public Student()
{
super();
}

public Student(String num, String name)
{
super();
this.num = num;
this.name = name;
}

public String getNum()
{
return num;
}

public void setNum(String num)
{
this.num = num;
}

public String getName()
{
return name;
}

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

}

public class JaxbTest
{
@Test
public void test01() throws IOException
{
try
{
JAXBContext ctx = JAXBContext.newInstance(SClass.class);
Marshaller marshaller = ctx.createMarshaller();
List<Student> lstStudent = new ArrayList<Student>();
Student s1 = new Student("001", "xy");
Student s2 = new Student("002", "xy2");
lstStudent.add(s1);
lstStudent.add(s2);
SClass sclass = new SClass("c001", lstStudent);

// 生成的XML文件位置
String path = "D:/sclass.xml";
File file = new File(path);
if (!file.exists())
{
file.createNewFile();
}
// 编码格式
marshaller.setProperty(Marshaller.JAXB_ENCODING, "gb2312");
// 是否格式化生成的XML
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 是否省略XML头信息<?xml version="1.0" encoding="gb2312" standalone="yes"?>
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
// 生成
marshaller.marshal(sclass, file);
}
catch (JAXBException e)
{
e.printStackTrace();
}
}

@Test
public void test02() throws Exception
{
try
{
String path = "D:/sclass.xml";
InputStream is = new FileInputStream(path);
String content = IOUtils.getString(is); 
JAXBContext ctx = JAXBContext.newInstance(SClass.class);
Unmarshaller um = ctx.createUnmarshaller();
SClass sclass = (SClass) um.unmarshal(new StringReader(content));
System.out.println(sclass.getCnum());
System.out.println(sclass.getStudents().get(1).getName());
}
catch (JAXBException e)
{
e.printStackTrace();
}
}

}

test01 执行结果:对象——>XML,生成XML标签的顺序按照首字母的顺序
<sClass>
    <cnum>c001</cnum>
    <students>
        <name>xy</name>
        <num>001</num>
    </students>
    <students>
        <name>xy2</name>
        <num>002</num>
    </students>
</sClass>


test02执行结果:
c001
xy2


IOUtils可以参考我的博客:http://blog.csdn.net/woshixuye/article/details/13613805

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章