
import java.util.List
import com.thoughtworks.xstream.annotations.XStreamAliasimport com.thoughtworks.xstream.annotations.XStreamImplicit
@XStreamAlias("person")
public class PersonBean {
@XStreamAlias("firstName")
private String firstName
@XStreamAlias("lastName")
private String lastName
@XStreamAlias("telphone")
private PhoneNumber tel
@XStreamAlias("faxphone")
private PhoneNumber fax
//省略setter和getter }
main函裤樱数示例1:toxml
import com.thoughtworks.xstream.XStreamimport com.thoughtworks.xstream.io.json.JsonWriter.Formatimport com.thoughtworks.xstream.io.xml.DomDriver
public class PersonTest {
public static void main(String[] args) {
PersonBean per=new PersonBean()
per.setFirstName("chen")
per.setLastName("youlong")
PhoneNumber tel=new PhoneNumber()
tel.setCode(137280)
tel.setNumber("137280968")
PhoneNumber fax=new PhoneNumber()
fax.setCode(20)
fax.setNumber("020221327")
per.setTel(tel)
per.setFax(fax)
//java对象转换成xml
String xml=XmlUtil.toXml(per)
System.out.println("xml==="+xml)
}
}
main函数示例2:toBean
public static void main(String[] args) {
String xmlStr="<person>"+
"<firstName>chen</firstName>"+
"<lastName>youlong<悔纯败/lastName>"+
"<telphone>"+
"<code>137280</code>"+
"<number>137280968</number>"+
"</telphone>"+
"<faxphone>"+
"<code>20</code>"+
"<number>020221327</number>"+
"</faxphone>"+
"<friends>"+
"<name>A1</name>"碧颤+
"<name>A2</name>"+
"<name>A3</name>"+
"</friends>"+
"<pets>"+
"<pet>"+
"<name>doly</name>"+
"<age>2</age>"+
"</pet>"+
"<pet>"+
"<name>Ketty</name>"+
"<age>2</age>"+
"</pet>"+
"</pets>"+
"</person>"//用泛型的知识
PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class)
System.out.println("person=firstname=="+person.getFirstName())
System.out.println("person==Friends==name1=="+person.getFriend().getName().get(0))
System.out.println("person==Pets==name2=="+person.getPet().getAnimalList().get(1).getName())
}
使用XStream完成 java 类与 XML 互换。下面代码实现了以下4种基本功能:
2. xml类型转换为object类型,在控制台打印
3. 将object类型转换为xml类型,并写入XML文件
4. 读取XML文件,加载进相应Object类型
====================================================
1。加载 XStream 需要的jar包 xstream-1.4.2.jar
xpp3_min-1.1.4c.jar
xmlpull-1.1.3.1.jar
2。创建实体类User.java
package com.entity
/**
* 实体类
*/
public class User {
private String userName
private String passWord
private String registeredTime
public User() { }
public User(String userName, String passWord, String registeredTime) {
this.userName = userName
this.passWord = passWord
this.registeredTime = registeredTime
}
public String getUserName() {
return userName
}
public void setUserName(String userName) {
this.userName = userName
}
public String getPassWord() {
return passWord
}
public void setPassWord(String passWord) {
this.passWord = passWord
}
public String getRegisteredTime() {
return registeredTime
}
public void setRegisteredTime(String registeredTime) {
this.registeredTime = registeredTime
}
}
3。编写功能实现类
package com.switcher
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.text.SimpleDateFormat
import java.util.Date
import com.entity.User
import com.thoughtworks.xstream.XStream
/**
*
* 使用 XStream不用任何映射就能实现多数 Java 对象的序列化。
* 在生闷睁肢成的 XML中对象名早察变成了元素名,类中的字符串组成了 XML中的元素内容。
* 使用 XStream 序列化的蚂世类不需要实现 Serializable 接口。
* XStream 是一种序列化工具而不是数据绑定工具
* 不能从XML 或者 XML Schema Definition (XSD) 文件生成类。
*/
public class SwitchXML {
/*
* XStream 不关心序列化/逆序列化的类的字段的可见性。
* 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
* 序列化/逆序列化的类不需要有默认构造函数。
*/
private XStream xStream = new XStream()
private String xmlPath = "D:/userdata.xml"
// 1. obj ->xml(object类型转换为xml类型)
public String printXML(User user) {
System.out.println("obj ->xml")
String xml = xStream.toXML(user)
System.out.println(xml)
return xml
}
// 2. xml->obj(xml类型转换为object类型,并打印)
public void printObj(String xml) {
System.out.println("xml ->obj")
User u = (User) xStream.fromXML(xml)
System.out.println(u.getUserName() + " " + u.getPassWord() + " " + u.getRegisteredTime())
}
// 3. 将object类型转换为xml类型,并写入XML文件(其他格式也可以,比如txt文件)
public void writerXML(User user) {
try {
FileOutputStream fs = new FileOutputStream(xmlPath)
xStream.toXML(user, fs)
} catch (FileNotFoundException e) {
e.printStackTrace()
}
}
// 4. 读取XML文件,加载进相应Object类型
public void readerXML() {
User user = new User()
FileInputStream fis = null
try {
fis = new FileInputStream(xmlPath)
} catch (FileNotFoundException e) {
e.printStackTrace()
}
xStream.fromXML(fis, user)
// 打印对象信息
System.out.println(user.toString())
// 打印对象的属性值
System.out.println(user.getUserName() + "-" + user.getPassWord() + "-"
+ user.getRegisteredTime())
}
public static void main(String[] args) {
// 用户名
String username = "admin"
// 密码
String password = "admin"
// 注册时间
Date now = new Date()
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss")
String registeredtime = format.format(now)
User user = new User(username, password, registeredtime)
SwitchXML switchXML = new SwitchXML()
// 1. object类型转换为xml类型,在控制台打印
String xml = switchXML.printXML(user)
System.out.println("---------------------")
// 2. xml类型转换为object类型,在控制台打印
switchXML.printObj(xml)
System.out.println("---------------------")
// 3. 将object类型转换为xml类型,并写入XML文件
switchXML.writerXML(user)
System.out.println("---------------------")
// 4. 读取XML文件,加载进相应Object类型
switchXML.readerXML()
}
}
本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例。我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件。如:jdom、dom4j等。虽然他们的功能非常强大,但在使用上还是有点不那么习惯。对于格式腊袜比较固定的XML文档,它的结构没有变化或是很少变化,这时将它转换成我们熟悉的Java对象来 *** 作的话,会使工作变得更容易一些,而xstream正好可以满足这一点。
本文所用xstream的版本为:1.4.7
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
</腊局腔dependency>
还是以之前的book XML为例,先上代码。
import com.thoughtworks.xstream.annotations.XStreamAlias
import com.thoughtworks.xstream.annotations.XStreamAsAttribute
@XStreamAlias("book")
public class Book {
// 别名注解,这个别名就是XML文档中的元素名,Java的属性名不一定要与别名一致
@XStreamAlias("name")
private String name
@XStreamAlias("author")
private String author
// 属性注解,此price就是book的属性,在XML中显示为:<book price="108">
@XStreamAsAttribute()
@XStreamAlias("price")
private String price
省略get和set方法
}
import java.util.List
import com.thoughtworks.xstream.annotations.XStreamAlias
import com.thoughtworks.xstream.annotations.XStreamImplicit
@XStreamAlias("books")
public class Books {
// 隐式集合,加上这个注解可以去掉book集合最外面的<list></list>这样的标记
@XStreamImplicit
private List<Book>list
省略轮衫get和set方法
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)