前言:对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>

更多相关文章

  1. Android读写XML(上)-----DOM
  2. Android系统启动流程(3) —— 解析SystemServer进程启动过程
  3. Android(安卓)打造编译时注解解析框架 这只是一个开始
  4. Android读写XML(上)
  5. Android之父深入解析Android
  6. android的xml解析
  7. Android的国际化
  8. Android小米5安装包解析失败问题
  9. android中读写sd卡文件

随机推荐

  1. Android中图像的几何变化中Matrix的使用
  2. Android 架构组件之 ViewBinding(视图绑定
  3. 2011.06.07(2)——— android 调试android
  4. Android 中全局键的处理GlobalKeyManager
  5. android八种通信方式
  6. Xml解析之----Pull
  7. Android与JS交互的细节问题
  8. Android简明开发教程六:用户界面设计
  9. android Studio 码云新建项目
  10. 安卓开发环境的搭建(Eclipse+ADT+SDK+JDK