XStream解析XML

来源:互联网 发布:淘宝网皮箱 编辑:程序博客网 时间:2024/05/03 15:50

Xstream解析Xml

本文只是给自己的加深点映像,每一行代码都是一笔财富,希望能够帮助到大家。

优点

  • 优势 高性能,低内存
  • 简单api,整洁xml
  • 图片链接和图片上传
  • 快速输出,能支持json
  • 不需要对对象进行过多的操作
  • 自定义转换类型
  • 支持java对象转xml,XML转对象,对象转json 等

使用地方

-用来转换服务器发送过来的数据
-用来保存数据,保存为xml文件的时候
-一般我们在配置文件的时候也使用,Configuration 配置
-单元测试的时候也可以使用

Xstream

Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁琐。。 —— [ 百度百科 ]

了解Xstream

必须jdk1.5以后才能支持此api
通过注解的方式

@XStreamAlias(“name”)
private String name;

对应Xml文件里面的name标签

>     <XML>>     `<name>张三</name>`>     </XML>

普通的注解就是给对象的属性取一个别名,也就是我们在xml里面看到的标签名,用于Xsream解析

对于集合也有不同的写法

@XStreamImplicit(itemFieldName=”name”)
private List<String> name;

对应我们xml里面多个参数

<friend>
<name>张三</name>
<name>李四</name>
<name>王五</name>
</friend>

如果是二级或者是多级菜单,都可以通过上述方式来进行注解
对包含属性的可以采用以下

@XStreamAsAttribute 转换成属性

对应xml中的id

<name id=”name”>

简单步骤

定义实体类 Student

@XStreamAlias(“name”)
private String name;
@XStreamAlias(“sex”)
private String sex;
//多个对象
@XStreamAlias(“classmate”)
private Contact classmate;
@XStreamAlias(“roommate”)
private Contact roommate;
@XStreamAlias(“soulmate”)
private Contact soulmate;
//朋友集合
@XStreamAlias(“friend”)
private Friend friend;
@XStreamAlias(“game”)
private Game game;
并为他们添加get和set的方法

通过上面的定义出xml的主体结构,各种不同的标签,如果想二级或者多级标签,以同样的方法给其他类注解就可以了,详情可参考demo代码。

Bean2XML

通过采用xstream-1.4.1.jar包的方法进行解析

public static String bean2Xml(Object obj){
XStream xStream=new XStream();
xStream.processAnnotations(obj.getClass());
return xStream.toXML(obj);
}

其中xStream.processAnnotations方法就是帮助解析注解的,没有此方法,就不会识别所有的注解的,必须要加上,同时通过我们的Xstream.toXml()方法就能够解析一个实体类,这个实体类必须要是添加了注解的。如果有些属性或者类没有注解就可能产生的xml标签会是包名

XML2Bean

我们通过传进一个要解析的类型的类数据,以便于能够更好的解析,当然这个类的属性也是需要注解的

public static T Xml2bean(String xmlstr,Class cls){
XStream xStream=new XStream(new DomDriver());
xStream.processAnnotations(cls);
T obj= (T) xStream.fromXML(xmlstr);
return obj;
}

通过上述方式我们就能够解析一个xml数据了,同时我们解析方法xStream.fromXML()支持字符串,字节流,url都是可以支持的。

Mainactivity主界面的代码

代码块

主页面通过赋值调用方法,例如:

public class MainActivity extends AppCompatActivity {    Student student;    Student student3;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        String xmlStr="<student>" +                "  <name>x小芸</name>" +                " <sex>男</sex>" +                " </student>";        initValue();       Student student2= XmlUtils.Xml2bean(xmlStr, student.getClass());        Log.e("xml", student2.getName());        //saveXml();        readFile();        if(student3!=null){            Log.e("xml", student3.getFriend().getName().get(2)+student3.getGame().getLollist().get(0).getExName());        }else{            Log.e("xml", "~~~~~~~~~~");        }    }    private void readFile(){        File sdCard = Environment.getExternalStorageDirectory();        String Filepath=sdCard.getAbsolutePath();        try {          student3= XmlUtils.File2bean(Filepath,"xml33",Student.class);        } catch (Exception e) {            e.printStackTrace();        }finally {        }    }    private void saveXml(){        File sdCard = Environment.getExternalStorageDirectory();        String Filepath=sdCard.getAbsolutePath();        //System.out.println(XmlUtil.toxmlFile(stu, Filepath, "students"));        try {             XmlUtils.bean2File(student,Filepath,"xml33");        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    private void initValue() {            student=new Student();            student.setName("大米粒");            student.setSex("女");            Contact classmate=new Contact();            classmate.setPhone(110);            classmate.setQQnumber(65177722);            Contact roommate=new Contact();            roommate.setPhone(119);            roommate.setQQnumber(65175612);             Contact soulmate=new Contact();             soulmate.setPhone(120);             soulmate.setQQnumber(800058810);             student.setClassmate(classmate);            student.setRoommate(roommate);            student.setSoulmate(soulmate);             List<String> friendlist=new ArrayList<String>();             friendlist.add("不会游泳的鱼");            friendlist.add("无悔这一生");            friendlist.add("空城旧梦");            Friend friend=new Friend();            friend.setName(friendlist);            student.setFriend(friend);            LOL lol=new LOL();            lol.setName("张飞");            lol.setExName("燕人张翼德");             LOL lol2=new LOL();            lol.setName("瑞文");             lol.setExName("放逐之刃");             Game game=new Game();             List<LOL> lolList=new ArrayList<LOL>();            lolList.add(lol);             lolList.add(lol2);        game.setLollist(lolList);            student.setGame(game);    }

解析完成的xml数据

<Student><classmate>  <QQnumber>65177722</QQnumber>  <phone>110</phone></classmate><roommate>  <QQnumber>65175612</QQnumber>  <phone>119</phone></roommate><soulmate>  <QQnumber>800058810</QQnumber>  <phone>120</phone></soulmate><friend>  <name>张三</name>  <name>李四</name>  <name>王五</name></friend><game>  <hero>    <ExName>复仇之矛</ExName>    <name>卡莉斯塔</name>  </hero>  <hero>    <ExName>放逐之仞</ExName>    <name>瑞文</name>  </hero></game><name></name><sex></sex></Student>

目录

[TOC]来生成目录:

  • Xstream解析Xml
    • 使用地方
    • Xstream
    • 了解Xstream
    • 简单步骤
      • 定义实体类 Student
      • Bean2XML
      • XML2Bean
      • Mainactivity主界面的代码
      • 代码块
      • 解析完成的xml数据
      • 目录
    • 最佳搭配

最佳搭配

  1. 配合Gson能够解析常见的多种数据格式
  2. JDK1.5以下不支持

1 0
原创粉丝点击