当前位置:首页 > 开发 > 编程语言 > XML > 正文

用XStream转换复杂XML

发表于: 2012-05-17   作者:21jhf   来源:转载   浏览:
摘要: 针对标签里面直接使用值的xml,比如  <IDS>      <ID>1234534</ID>      <ID>1111111111</ID>    </IDS>   还

针对标签里面直接使用值的xml,比如

 <IDS>
      <ID>1234534</ID>
      <ID>1111111111</ID>
    </IDS>

 

还有节点既有属性又有值的xml,比如

<INPUT>
  <RAW_SQL TYPE="PERSON">select id from person</RAW_SQL>
</INPUT>

需要一个转换器来转换,转换器代码如下:

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.zhhy.server.beans.RawSQL;

public class RawSQLConverter implements Converter {

 @SuppressWarnings("rawtypes")
 public boolean canConvert(Class clazz) {
  return clazz.equals(RawSQL.class);
 }

 public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext acontext) {
  RawSQL rawSQL = (RawSQL) value;
  if (rawSQL != null) {
   if (null != rawSQL.getType()) {
    writer.addAttribute("TYPE", rawSQL.getType());
   }
   writer.setValue(rawSQL.getRawSql() == null ? "" : rawSQL.getRawSql());
  }

 }

 public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext arg1) {
  RawSQL rawSql = new RawSQL();
  String type = reader.getAttribute("TYPE");
  rawSql.setType(type);

  String value = reader.getValue();

  rawSql.setRawSql(value);

  return rawSql;

 }

}
类的annotation配置如下:

@XStreamAlias("RAW_SQL")
@XStreamConverter(RawSQLConverter.class)
public class RawSQL {
 @XStreamAsAttribute
 @XStreamAlias("TYPE")
 private String type;

 private String rawSql;

 下面省略了getter和setter方法
}

 

 

后记:(2012-05-18日添加)

如果对象中定义的类型与实际类型不一致,比如定义的是Object类型,但是实际初始化的对象是其他类型,转换出来的xml文件都会加上class="实际类型"属性,举例:<PERSON class="PERSON">...</PERSON>

有两种方法去掉这个属性

1, xstream.alias("field name", Interface.class, ActualClassToUse.class);
2, xstream.aliasSystemAttribute(null, "class");

我选择用后面一种,这样会把所有class属性去掉,如果只去掉某些类的这个多余的属性,用第一种方式即可。

用XStream转换复杂XML

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一. 简介 xStream可以很容易实现Java对象和xml文档互相转换, 可以修改某个特定的属性和节点名称,x
xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名
因为是测试,所以是先从SD卡读取一个xml文件,转换成对象,再把这个对象生成xml文件,写入SD卡,(
XStream是一个能将java 对象与 xml字符串进行互相转换的这么一个java library。 官网地址:http://x
在实际的项目中,IPhone应用程序会存在很多与服务器之间的数据交互的地方,XML是首选方案。 此包可
使用 XStream 把 Java 对象序列化为 XML 使用 XStream 轻松实现对象持久化、配置和数据传输 XML 序
使用 XStream 把 Java 对象序列化为 XML 使用 XStream 轻松实现对象持久化、配置和数据传输 <!--
使用 XStream 把 Java 对象序列化为 XML 使用 XStream 轻松实现对象持久化、配置和数据传输 XML 序
采用xstream实现javabean和xml互转(1)中是对xml字符串和javabean之间进行互转,其实xstream也支持xml
在寻找一个功能全面、文档齐备、交互性强、易于使用、配置灵活、bug较少还FOR FREE 的图表组件失败
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号