xtream :xml序列化、解析框架

xtream :xml序列化、解析框架,第1张

XStream xstream =newXStream()

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种基本功能:

1. object类型转换为xml类型,在控制台打印

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()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7954628.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存