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>

时间: 2024-10-09 19:43:45

android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档的相关文章

android XMl 解析神奇xstream 二: 把对象转换成xml

前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 package com.android10; public class Product { private String name ; private String age ; public String getName() { return name; } public void setName(Strin

android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml 1.文件准备 把一个预先写好的xml文件放在android项目目录的 asset 文件夹. 文件内容为: <blog> <age>30</age> <

android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml 1.JavaBeen package com.android10; public class Person { String pName ; String pAge ; public String getpName() { return pName; } pub

android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象 1.建立JavaBeen package com.android10; public class

android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

1.下载工具 xstream 下载最新版本地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/ 下载完成后 把jar包导入到自己的android项目中 2.asset 文件夹 下的 aa.xml 文件 <?xml version="1.0" encoding="UTF-8"?><product>    <name>

Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探

Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便写下这篇博客心得 Google API:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html#terms 其实大家要学习Android的技术,Google的API就是最详细的指导书了,而且通俗易懂,就算看不懂

Android记录17-sdk更新、Eclipse下查看源码、chm文档提供等干货

Android记录17-sdk更新.Eclipse下查看源码.chm文档提供等干货 本篇博客分享一些Android开发者提高开发效率的一些干货,之从Google被和谐了之后,Android开发者可谓痛不欲生,只能通过翻墙的方式去查看官网,sdk更新不了,无法下载源码等问题就出现了,作为一位有追求的Android开发者,不可能只满足于使用sdk这种初级技能了,提高开发效率和代码质量是每位开发者应该去追求的,下面小巫整理总结了一些解决方案供各位参考,让Android开发变得高大上一些. sdk更新

Android源代码解析之(六)--&amp;gt;Log日志

转载请标明出处:一片枫叶的专栏 首先说点题外话,对于想学android framework源代码的同学,事实上能够在github中fork一份,详细地址:platform_frameworks_base 这里面基本都是android framework层的源代码了.并且近期发现了一个比較不错的github插件:OctoTree,它 是一个浏览器插件,它能够让你在Github 看代码时,左边栏会出现一个树状结构.就像我们在IDE 一样.当我们看一个项目的结构,或者想看详细的某个文件,这样就会非常方

(转载)XML解析之-XStream解析

转载来源:http://hwy584624785.iteye.com/blog/1168680 本例使用XStream生成一个xml文件,再发序列化xml文件内容. XStream是一个简单的类库,可以序列化对象到xml,还可以将xml还原为对象. XStream官网:http://xstream.codehaus.org/附件提供XStream和xpp3相关的jar下载: xstream-1.2.2.jarxpp3-1.1.3.3_min.jar为了使用XStream,需要对其初始化,初始化方