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数据
- 目录
- 最佳搭配
最佳搭配
- 配合Gson能够解析常见的多种数据格式
- JDK1.5以下不支持
- 解析XML XStream
- 用xstream解析XML
- 使用xstream解析xml
- xml 解析 Xstream
- XStream解析xml文件
- android xstream 解析xml
- XStream解析xml
- XStream解析XMl文件
- XStream解析XML字符串
- XStream解析XML
- 利用xstream解析xml
- XStream解析xml
- Xstream解析XML文件
- Xstream解析XML文件
- Xstream解析XML
- 用Xstream解析XML
- xStream解析XML
- xStream解析xml文件
- JDBC之打通数据库
- 过滤器Filter高级应用
- Cocoapods使用第三方的步骤
- Linux下的platform总线驱动(二)
- 欢迎使用CSDN-markdown编辑器
- XStream解析XML
- iOS应用性能调优的25个建议和技巧
- android java文件调用.so文件
- android小技巧
- 深度学习与计算机视觉系列(1)_基础介绍
- easyui tree onloadSuccess 事件心得
- mysql数据库备份命令
- 微信平台调用群发接口发送图文消息时图片不显示
- warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失