XML 处理利器 : XStream

前端之家收集整理的这篇文章主要介绍了XML 处理利器 : XStream前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

XStream 概述

XStream 是一套简洁易用的开发类库,用于将Java对象序列化为XML或者将XML反序列化为JAVA对象,是JAVA对象和XML之间一个双向转换器。

举例

采用User用户对象和LoginLog登录日志对象作为XStream实例转换对象. 例子简单,直接贴代码了.
User.java
  1. package com.baobaotao.domain;
  2.  
  3. import java.io.Serializable;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.Map;
  8.  
  9. public class User implements Serializable {
  10. private int userId;
  11. private String userName;
  12. private String password;
  13. private int credits;
  14. private String lastIp;
  15. private Date lastVisit;
  16. private List logs;
  17. private Map datas;
  18. public List<LoginLog> getLogs() {
  19. return logs;
  20. }
  21. public void setLogs(List logs) {
  22. this.logs = logs;
  23. }
  24. public int getUserId() {
  25. return userId;
  26. }
  27. public void setUserId(int userId) {
  28. this.userId = userId;
  29. }
  30. public String getUserName() {
  31. return userName;
  32. }
  33. public void setUserName(String userName) {
  34. this.userName = userName;
  35. }
  36. public String getPassword() {
  37. return password;
  38. }
  39. public void setPassword(String password) {
  40. this.password = password;
  41. }
  42. public int getCredits() {
  43. return credits;
  44. }
  45. public void setCredits(int credits) {
  46. this.credits = credits;
  47. }
  48. public String getLastIp() {
  49. return lastIp;
  50. }
  51. public void setLastIp(String lastIp) {
  52. this.lastIp = lastIp;
  53. }
  54. public Date getLastVisit() {
  55. return lastVisit;
  56. }
  57. public void setLastVisit(Date lastVisit) {
  58. this.lastVisit = lastVisit;
  59. }
  60. public void addLoginLog(LoginLog log){
  61. if(this.logs==null){
  62. logs = new ArrayList<LoginLog>();
  63. }
  64. logs.add(log);
  65. }
  66. public Map getDatas() {
  67. return datas;
  68. }
  69. public void setDatas(Map datas) {
  70. this.datas = datas;
  71. }
  72. }

LoginLog.java

  1. package com.baobaotao.domain;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Date;
  5.  
  6. public class LoginLog implements Serializable {
  7. private int loginLogId;
  8. private int userId;
  9. private String ip;
  10. private Date loginDate;
  11. public int getLoginLogId() {
  12. return loginLogId;
  13. }
  14. public void setLoginLogId(int loginLogId) {
  15. this.loginLogId = loginLogId;
  16. }
  17. public int getUserId() {
  18. return userId;
  19. }
  20. public void setUserId(int userId) {
  21. this.userId = userId;
  22. }
  23. public String getIp() {
  24. return ip;
  25. }
  26. public void setIp(String ip) {
  27. this.ip = ip;
  28. }
  29. public Date getLoginDate() {
  30. return loginDate;
  31. }
  32. public void setLoginDate(Date loginDate) {
  33. this.loginDate = loginDate;
  34. }
  35.  
  36. }

下面就开始使用XStream进行对象与 XML之间的转换.
  1. package com.baobaotao.oxm.xtream;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.util.Date;
  6.  
  7. import com.baobaotao.domain.LoginLog;
  8. import com.baobaotao.domain.User;
  9. import com.thoughtworks.xstream.XStream;
  10. import com.thoughtworks.xstream.io.xml.DomDriver;
  11.  
  12. public class XStreamSample {
  13. private static XStream xstream;
  14. static{
  15. //创建XStream实例并指定一个XML 解析器
  16. xstream=new XStream(new DomDriver());
  17. }
  18. //初始化转换对象
  19. public static User getUser(){
  20. LoginLog log1=new LoginLog();
  21. log1.setIp("192.168.1.91");
  22. log1.setLoginDate(new Date());
  23. User user=new User();
  24. user.setUserId(1);
  25. user.setUserName("xstream");
  26. user.addLoginLog(log1);
  27. return user;
  28. }
  29. //Java 对象转换成XML
  30. public static void objectToXML() throws Exception{
  31. //获取转换User对象的实例
  32. User user=getUser();
  33. //实例化一个文件输出
  34. FileOutputStream fileOutputStream=new FileOutputStream("XStreamSample.xml");
  35. //将User对象转换为XML,并保存到指定文件
  36. xstream.toXML(user,fileOutputStream);
  37. }
  38. //XML转换为Java对象
  39. public static User XMLToObject() throws Exception{
  40. //实例化一个文件输入流
  41. FileInputStream inputStream=new FileInputStream("XStreamSample.xml");
  42. //将XML文件输入流转化为对象
  43. User user=(User) xstream.fromXML(inputStream);
  44. for(LoginLog log :user.getLogs()){
  45. if(log!=null){
  46. System.out.println("访问IP:"+log.getIp());
  47. }
  48. }
  49. }
  50.  
  51. }

编写测试类
  1. package com.baobaotao.oxm.xstream;
  2.  
  3. import static org.junit.Assert.assertEquals;
  4. import static org.junit.Assert.assertNotNull;
  5.  
  6. import java.io.BufferedReader;
  7. import java.io.FileReader;
  8.  
  9. import org.junit.Test;
  10.  
  11. import com.baobaotao.domain.LoginLog;
  12. import com.baobaotao.domain.User;
  13. import com.baobaotao.oxm.xtream.XStreamSample;
  14.  
  15. public class TestXStreamSample {
  16.  
  17.  
  18. @Test
  19. public void objectToXml()throws Exception {
  20. XStreamSample.objectToXML();
  21. FileReader reader = new FileReader("XStreamSample.xml");
  22. BufferedReader br = new BufferedReader(reader);
  23. StringBuffer sb = new StringBuffer("");
  24. String s;
  25. while ((s = br.readLine()) != null) {
  26. sb.append(s);
  27. }
  28. System.out.println(sb.toString());
  29. reader.close();
  30. br.close();
  31. // assertXpathExists("//com.baobaotao.domain.User",sb.toString());
  32. // assertXpathExists("//credits",sb.toString());
  33. // assertXpathExists("//userName",sb.toString());
  34. // assertXpathExists("//com.baobaotao.domain.LoginLog",sb.toString());
  35. }
  36.  
  37. @Test
  38. public void xmlToObject()throws Exception {
  39. XStreamSample.objectToXML();
  40. User u = XStreamSample.XMLToObject();
  41. assertNotNull(u);
  42. assertEquals("xstream",u.getUserName());
  43. for (LoginLog log : u.getLogs()) {
  44. assertNotNull(log);
  45. assertNotNull(log.getIp());
  46. assertNotNull(log.getLoginDate());
  47. }
  48.  
  49. }
  50. }

生成的XML文件如下:
  1. <com.baobaotao.domain.User>
  2. <userId>1</userId>
  3. <userName>xstream</userName>
  4. <credits>0</credits>
  5. <logs>
  6. <com.baobaotao.domain.LoginLog>
  7. <loginLogId>0</loginLogId>
  8. <userId>0</userId>
  9. <ip>192.168.1.91</ip>
  10. <loginDate>2015-03-25 07:44:05.783 UTC</loginDate>
  11. </com.baobaotao.domain.LoginLog>
  12. </logs>
  13. </com.baobaotao.domain.User>


使用XStream 别名

在默认情况下,Java对象映射到XML的映射,是Java对象属性名对应XML的元素名,Java类的全名对应XML根元素的名字。在实际的应用中,如果XML和Java类都已经存在相应的名字,在进行转换时,需要设置别名进行映射。
XStream别名配置包含三种情况:
类别名,用alias(String name,Class type);
类成员别名,用aliasField(String alias,Class definedIn,String fieldName);yo
类成员作为属性别名,用aliasAttribute(Class definedIn,String attributeName,String alias),单独命名没有意义,还要通过useAttributeFor(Class definedIn,String fieldName) 应用到某个类上。


  1. package com.baobaotao.oxm.xtream.alias;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.util.Date;
  6.  
  7. import com.baobaotao.domain.LoginLog;
  8. import com.baobaotao.domain.User;
  9. import com.thoughtworks.xstream.XStream;
  10. import com.thoughtworks.xstream.io.xml.DomDriver;
  11.  
  12. /**
  13. * 别名
  14. * @author yulei
  15. */
  16. public class XStreamAliasSample {
  17. private static XStream xstream;
  18. static {
  19. xstream=new XStream(new DomDriver());
  20. //设置类别名,默认为当前类名称加上包名
  21. xstream.alias("loginLog",LoginLog.class);
  22. xstream.alias("user",User.class);
  23. //设置类成员别名
  24. xstream.aliasField("id",User.class,"userId");
  25. //把LoginLog的userId属性视为XML属性,默认为XML的元素
  26. xstream.aliasAttribute(LoginLog.class,"userId","id");
  27. xstream.useAttributeFor(LoginLog.class,"userId");
  28. //去掉集合类型生成XML的父节点,即忽略XML中的<logs></logs>标记
  29. xstream.addImplicitCollection(User.class,"logs");
  30. }
  31. //初始化转换对象
  32. public static User getUser(){
  33. LoginLog log1=new LoginLog();
  34. log1.setIp("192.168.1.91");
  35. log1.setLoginDate(new Date());
  36. User user=new User();
  37. user.setUserId(1);
  38. user.setUserName("xstream");
  39. user.addLoginLog(log1);
  40. return user;
  41. }
  42. //Java 对象转换成XML
  43. public static void objectToXML() throws Exception{
  44. //获取转换User对象的实例
  45. User user=getUser();
  46. //实例化一个文件输出
  47. FileOutputStream fileOutputStream=new FileOutputStream("XStreamSample.xml");
  48. //将User对象转换为XML,并保存到指定文件
  49. xstream.toXML(user,fileOutputStream);
  50. }
  51. //XML转换为Java对象
  52. public static User XMLToObject() throws Exception{
  53. //实例化一个文件输入流
  54. FileInputStream inputStream=new FileInputStream("XStreamSample.xml");
  55. //将XML文件输入流转化为对象
  56. User user=(User) xstream.fromXML(inputStream);
  57. for(LoginLog log :user.getLogs()){
  58. if(log!=null){
  59. System.out.println("访问IP:"+log.getIp());
  60. }
  61. }
  62. return user;
  63. }
  64.  
  65. }

猜你在找的XML相关文章