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

简介:

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", "lw");

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>lw</name>

<num>002</num>

</students>

</sClass>


test02执行结果:

c001

lw

关于IOUtils可以参看我的博客:http://woshixy.blog.51cto.com/5637578/1316935

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1318743如需转载请自行联系原作者


woshixuye111

相关文章
|
21天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
24天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
45 17
|
24天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
1月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第7天】Java零基础教学篇,手把手实践教学!
28 6
|
1月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
21 3
|
1月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
1月前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
56 7
|
1月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第3天】Java零基础教学篇,手把手实践教学!
19 1
|
1月前
|
Java 数据安全/隐私保护
java类和对象
java类和对象
26 5
|
1月前
|
Java 编译器 C语言
【一步一步了解Java系列】:类与对象的联系
【一步一步了解Java系列】:类与对象的联系
19 4