jsp Form->Java Bean ->使用XStream->生成XML文件

jsp Form->Java Bean ->使用XStream->生成XML文件,第1张

[代码]1.实体类:PersonBean

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

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

}

}

本文记录一下使用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方法

}


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

原文地址:https://54852.com/tougao/12246728.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存