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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三:...
前言:对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>

 

相关文章
|
2月前
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
3月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
56 3
|
1月前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
安全 Java Linux
深入解析Android系统架构及其对开发者的意义####
【10月更文挑战第21天】 本文旨在为读者揭开Android操作系统架构的神秘面纱,探讨其如何塑造现代移动应用开发格局。通过剖析Linux内核、硬件抽象层、运行时环境及应用程序框架等关键组件,揭示Android平台的强大功能与灵活性。文章强调了理解Android架构对于开发者优化应用性能、提升用户体验的重要性,并展望了未来技术趋势下Android的发展方向。 ####
66 0
|
2月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
40 0
|
3月前
|
开发工具 Android开发 iOS开发
深入解析安卓与iOS开发环境的优劣
【10月更文挑战第4天】 本文将深入探讨安卓和iOS两大主流移动操作系统的开发环境,从技术架构、开发工具、用户体验等方面进行详细比较。通过分析各自的优势和不足,帮助开发者更好地理解这两个平台的异同,从而为项目选择最合适的开发平台提供参考。
43 3
|
3月前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
77 4
|
2月前
|
安全 5G Android开发
安卓与iOS的较量:技术深度解析
【10月更文挑战第24天】 在移动操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两个系统的技术特点、优势和不足,以及它们在未来可能的发展方向。我们将通过对比分析,帮助读者更好地理解这两个系统的本质和内涵,从而引发对移动操作系统未来发展的深思。
68 0

热门文章

最新文章

推荐镜像

更多