java字节转xml_Java实现XML和JavaBean互转 - XStream

本文介绍了XStream库在Java中用于XML和JavaBean互相转换的使用方法,包括设置别名、选择属性为XML标签、输入输出操作,并提供了JavaBean转XML和XML转JavaBean的实例代码。
摘要由CSDN通过智能技术生成

1、简介

XStream是一个序列化JavaBean为XML文件以及反序列化的工具。

2、准备

2.1、XML回顾

在学习这部分内容前,假设你对XML以及有一定的了解,至少能够分辨出XML的元素、属性、字段、包、系统属性、类型等等。例如有下边的一段XML:

Everyday Italian

Giada De Laurentiis

2005

30.00

Harry Potter

J K. Rowling

2005

29.99

Learning XML

Erik T. Ray

2003

39.95

它的元素、属性、元素等对应关系如下:

47ada3d7ee8ba1c73a03c550e985af56.gif

看懂了上边的对应关系,就可以进行往下阅读了。

2.2、能需要了解的概念

别名

JavaBean的属性和XML里的表签名可能名称不一样,那么在相互转换过程中通过来设置别名来解决该问题。给Java类或某字段设置别名,在转换对应的XML里,该别名就是XML里的标签名称。可以设置别名的有:类、同一名字的全部属性,某一类中的某名字的属性、某类中的某字段、包、系统属性、类型。

通过调用XStream的api来设置别名:

voidalias(String name, Class type)voidalias(String name, Class type, Class defaultImplementation)voidaliasAttribute(Class definedIn, String attributeName, String alias)voidaliasAttribute(String alias, String attributeName)voidaliasField(String alias, Class definedIn, String fieldName)voidaliasPackage(String name, String pkgName)voidaliasSystemAttribute(String alias, String systemAttributeName)void aliasType(String name, Class type)

还可以通过注解来给类和字段配置别名:

@XStreamAlias("student")publicclaa Student{

@XStreamAlias("personName")

private String name;

}

用注解时,需要在xStream对象上设置使用注解来取别名:

xStream.processAnnotations(Student.class);

选择哪些属性座位XML的标签属性

voiduseAttributeFor(Class type);//转换后该类对应的标签作为xml的属性voiduseAttributeFor(Class definedIn, String fieldName);//该类下名为fieldName的字段在转换后,做为definedIn对应标签的属性void useAttributeFor(String fieldName, Class type);//该类下名为fieldName的字段在转换后,做为definedIn对应标签的属性

输入与输出

JavaBean转到XML时,转出的XML字符可以直接返回给调用处,也可以用字符流或字节流输出:

String toXML(Object obj);//返回字符串

void toXML(Object obj, OutputStream out);//字节流

void toXML(Object obj, Writer out);//字符流

XML转到JavaBean时,加载的XML文件可以是一段XML字符串、一个XML文件对象、XML文件字符输入流、XML文件字节输入流,甚至一个URL资源。可以指定传入一个JavaBean,将会用XML各个元素值来填充传入的JavaBean并返回,这里不会重新创建出一个JavaBean:

Object fromXML(File file);

Object fromXML(File file, Object root);

Object fromXML(InputStream input);

Object fromXML(InputStream input, Object root);

Object fromXML(Reader reader);

Object fromXML(Reader xml, Object root);

Object fromXML(String xml);

Object fromXML(String xml, Object root);

Object fromXML(URL url);

Object fromXML(URL url, Object root);

3、实例演练

objectAlias为将要设置的别名和字段对应集合。

JavaBean转为XML

/*** JavaBean转为XML

*@paramobjectT 将要转的JavaBean

*@paramobjectAlias 别名集合

*@return返回的String字符串

*@throwsException*/

public static String objectToContext(T objectT,

Map objectAlias) throwsException {

XStream xStream= null;

String context= null;try{

xStream= new XStream(newDom4JDriver());for(Map.Entryentry : objectAlias.entrySet()){

xStream.alias(entry.getKey(), entry.getValue());

}

context=xStream.toXML(objectT);

}catch(Exception e) {

LOGGER.error(e.getMessage());throwe;

}returncontext;

}

XML转为JavaBean

/*** 把XML字符串转为对象,并返回

*@paramxmlContent XML字符串

*@paramobjectAlias 别名集合

*@paramclazz 将要转换成的对象类型

*@throwsException*/

public static T contextToObject(String xmlContent,Map objectAlias, Class clazz) throwsException {

XStream xStream= null;

T objectT= null;try{

xStream= new XStream(newDom4JDriver());for(Map.Entryentry : objectAlias.entrySet()){

xStream.alias(entry.getKey(), entry.getValue());

}

objectT=(T) xStream.fromXML(xmlContent);

}catch(Exception e) {

LOGGER.error(e.getMessage());throwe;

}returnobjectT;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值