android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看:
android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
android XMl 解析神奇xstream 二: 把对象转换成xml
android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
1、创建JavaBeen
package com.android10;
public class Person {
String pName ;
String pAge ;
public String getpName() {
return pName;
}
public void setpName(String pName) {
this.pName = pName;
}
public String getpAge() {
return pAge;
}
public void setpAge(String pAge) {
this.pAge = pAge;
}
}
package com.android10;
public class Product {
private String name ;
private String age ;
private Person person ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
package com.android10;
import java.util.List;
public class ListBean {
private List<Product> root ;
public List<Product> getRoot() {
return root;
}
public void setRoot(List<Product> root) {
this.root = root;
}
}
2、主要方法
package com.android10;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List; import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.stream.StreamResult; import org.xml.sax.InputSource; import android.app.Activity;
import android.os.Bundle; import com.thoughtworks.xstream.XStream;
public class MainActivity extends Activity { @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.activity_main ); XStream xstream = new XStream() ; List<Product> root = getList() ; //将ListBean中的集合设置空元素,即不显示集合元素标签
xstream.addImplicitCollection( ListBean.class, "root"); xstream.autodetectAnnotations(true); //设置别名
xstream.alias( "product", Product.class ); //将name设置为父类(Student)的元素的属性
xstream.useAttributeFor( Product.class, "name" ); //把list集合转换成Xml字符串
String xmlString = xstream.toXML( root ) ; //把Xml字符串写入SD卡Xml文件
XstreamUtil xstreamUtil = new XstreamUtil() ;
xstreamUtil.writeToXml( this , xmlString ) ; //把Xml字符串转化成list集合
List<Product> list = new ArrayList<Product>() ;
list = (List<Product>) xstream.fromXML( xmlString ) ; System.out.println("sss"+ formatXml( xmlString ) ); } /**
* 得到数据
* @return
*/
private List<Product> getList(){
Person person1 = new Person() ;
person1.setpName( "saliy" ) ;
person1.setpAge( "36" ); Product product1 = new Product() ;
product1.setName( "jhon" ) ;
product1.setAge( "30" );
product1.setPerson( person1 ); Person person2 = new Person() ;
person2.setpName( "saliy02" ) ;
person2.setpAge( "3602" ); Product product2 = new Product() ;
product2.setName( "jhon02" ) ;
product2.setAge( "3002" );
product2.setPerson( person2 ); List<Product> root = new ArrayList<Product>() ;
root.add( product1 ) ;
root.add( product2 ) ; return root ;
} /**
* 格式化XML字符串
* @param xml
* @return
*/
public static String formatXml(String xml){
try{
Transformer serializer= SAXTransformerFactory.newInstance().newTransformer();
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
Source xmlSource=new SAXSource(new InputSource(new ByteArrayInputStream(xml.getBytes())));
StreamResult res = new StreamResult(new ByteArrayOutputStream());
serializer.transform(xmlSource, res);
return new String(((ByteArrayOutputStream)res.getOutputStream()).toByteArray());
}catch(Exception e){
return xml;
}
}
}
package com.android10; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter; import android.content.Context;
import android.os.Environment; public class XstreamUtil { XcallBack xcallBack ; /**
* 把xml字符串写入SD卡文件
* @param context
* @param str xml字符串
*/
public void writeToXml(Context context, String str ){ //获取文件路径
String SDPATH = Environment.getExternalStorageDirectory() + "/myfile1.xml/" ; //创建文件
File file = new File( SDPATH ) ;
if( !file.exists() ){
try {
file.createNewFile() ;
} catch (IOException e) {
e.printStackTrace();
}
} //写入数据
try {
FileOutputStream out = new FileOutputStream( file ) ;
OutputStreamWriter outw = new OutputStreamWriter(out);
try {
outw.write(str);
outw.close();
out.close();
if( xcallBack != null ){
xcallBack.success();
}
} catch (IOException e) {
if( xcallBack != null ){
xcallBack.fail();
}
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
if( xcallBack != null ){
xcallBack.fail();
}
}
} //设置监听器
void setXStreamLister( XcallBack xcallBack ){
this.xcallBack = xcallBack ;
} } interface XcallBack{
/**
* 写入成功
*/
void success() ; /**
* 写入失败
*/
void fail() ;
}
3、运行结果
<list>
<product name="jhon">
<age>30</age>
<person>
<pAge>36</pAge>
<pName>saliy</pName>
</person>
</product>
<product name="jhon02">
<age>3002</age>
<person>
<pAge>3602</pAge>
<pName>saliy02</pName>
</person>
</product>
</list>
android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档的更多相关文章
- android XMl 解析神奇xstream 二: 把对象转换成xml
前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件
简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...
- Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探
Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便 ...
- Android源代码解析之(六)-->Log日志
转载请标明出处:一片枫叶的专栏 首先说点题外话,对于想学android framework源代码的同学,事实上能够在github中fork一份,详细地址:platform_frameworks_bas ...
- XML解析---利用XStream解析xml数据及反构造Java对象
XStream 是一个轻量级的.简单易用的开放源代码 Java库,用于将 Java 对象序列化为 XML 或者再转换回来.而且XStream还能将java对象转成其它格式,比如JSon. 需要用到的包 ...
- 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)
☆ 写在前面 之前答应大家的毕业答辩之后把所有文档贡献出来,现在答辩已过,LZ信守承诺,把所有文档开源到了GitHub(这个地址包含所有的代码和文档以及PPT,外层为简单的代码).还望喜欢的朋友们,不 ...
随机推荐
- winform 指定浏览器打开链接
Process myProcess = new Process(); myProcess.StartInfo.FileName = "firefox.exe";//&quo ...
- SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework
1.调用前组装参数 2.调用发送信息服务脚本 .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.Mess ...
- Bower 手册
安装 Bower 使用 npm 安装 Bower.(Bower 依赖于 Node, npm 和 Git.) $ npm install -g bower 基本用法 安装程序包 程序包安装命令 bowe ...
- ruby -- 进阶学习(十二)fragment cache
基于rails4.0环境 Rails 页面缓存的方法很多,最近弱弱地尝试了fragment cache,用法还算简单~@_@|| 首先,查看config/environment/production. ...
- NopCommerce插件学习
在园子里看到这篇文章:http://www.cnblogs.com/haoxinyue/archive/2013/06/06/3105541.html写的非常好,我也是在此文章的基础上来一步步的学习N ...
- spring websocket源码分析
什么是websocket? 摘录于wiki[1]: WebSocket is a protocol providing full-duplex communication channels over ...
- 【转载】一步一步写算法(之hash表)
转载自:http://blog.csdn.net/feixiaoxing/article/details/6885657 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaox ...
- 15套帮助你展示 App 设计的透视屏幕原型素材
Dribbble 和 Behance 是最好两个展示你的设计作品的地方.现在流行使用透视屏幕来展示应用程序设计效果,尤其是在 Dribbble 上面,有众多高品质的免费资源和设计素材. 这篇文章汇集了 ...
- #敏捷个人资料# 免费下载 《敏捷个人-认识自我,管理自我 v0.8.pdf》
快乐.高效.平衡,做一个爱学习.有目标.懂生活的影响者. 从今天开始至7月31日,点击http://t.cn/Rv3koHU 免费收到 1000多页的 <敏捷个人-认识自我,管理自我 v0.8. ...
- Java魔法堂:初探MessageFormat.format和ChoiceFormat
一.前言 刚开始从.net的转向java的时候总觉得 String.format 用得不习惯,希望格式模版会这样 {}, }$s,$s's cat.%2$s,this is %1$s's dog. . ...