
xml序列化
xstream.toXML(对象)
可用xstream.alias("根结点",根结点.class)改标题名字
解析框架:
xtream.fromXML(xml)
返回一个字符串
使用Xstream将bean转成xml时也遇到这个问题,看了下Xstream下面的几个方法,试了几个方法,问题得到解决。
问题复现:bean中的数组,转成xml后,全路径在xml中作为节点名,如下图
添加别名后问题解决,红圈部分是关键点:
即使用 xStream.alias("xxx", class)来为数组中的bean添加别名。
希望能解决你的问题以及帮到遇到相同问题的朋友。
使用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()
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)