对象转成xml(并且序列化xml)在android中

本文介绍了在Android环境中将对象转换为XML格式的方法,包括直接转换并不写入文件,以及提供了一种工具类和实体类的实现方式,详细阐述了这种转换和序列化的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种
在本地生成AppuserManager.xml文件,并且把对象转成了xml格式
package com.example.hasee.myxml;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Xml;
import android.view.View;
import android.widget.TextView;

import org.xmlpull.v1.XmlSerializer;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    List<AppuserManager> list;
    private TextView tv_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv_text = (TextView)findViewById(R.id.tv_text);
        list = new ArrayList<AppuserManager>();
       
            AppuserManager ap = new AppuserManager("appuser", "*", "ID=1",
                    "updatetime desc", 0, 0);
            list.add(ap);
    }


    public void click(View v){
        //使用序列化器生成xml文件
        //1、得到xml序列化器对象
        XmlSerializer xs = Xml.newSerializer();
        //2、设置序列化器的输出流
        File file = new File(Environment.getExternalStorageDirectory(),"AppuserManager.xml");
        FileOutputStream fos;


        try {
            fos = new FileOutputStream(file);

            xs.setOutput(fos, "utf-8");
            //3、开始生成xml文件
            xs.startDocument("utf-8", true);
            xs.startTag(null, "Root");
//            for (int i = 0; i < list.size(); i++) {
                xs.startTag(null, "SubModelNode");
                xs.attribute("","ModelName","AppUser_mod");


                xs.startTag(null, "TableName");

                xs.text(list.get(0).getTableName());
                xs.endTag(null, "TableName");

                xs.startTag(null, "Fields");
                xs.attribute("","DataType","String");
                xs.text(list.get(0).getFields());
                xs.endTag(null, "Fields");

                xs.startTag(null, "Where");
                xs.attribute("","DataType","String");
                xs.endTag(null, "Where");

                xs.startTag(null, "OrderBy");
                xs.attribute("","DataType","String");
                xs.text(list.get(0).getOrderBy());
                xs.endTag(null, "OrderBy");

                xs.startTag(null, "PageIndex");
                xs.attribute("","DataType","Int32");// xs.attribute 一定要在xs.text 的上面否则就报错
                xs.text(list.get(0).getPageIndex()+"");
                xs.endTag(null, "PageIndex");

                xs.startTag(null, "PageSize");
            xs.attribute("","DataType","Int32");
            xs.text(list.get(0).getPageSize()+"");
                xs.endTag(null, "PageSize");

                xs.endTag(null, "SubModelNode");
//            }/////////////////////

            xs.endTag(null, "Root");
            xs.endDocument();
            tv_text.setText(fos.toString());
            fos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

写进去,在读出来,参考http://www.tuicool.com/articles/A7BNz2i

第二种:只是把对象转成了 xml格式,并不写在文件里

package com.example.hasee.myxml;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import com.thoughtworks.xstream.XStream;

/**
 * 创建日期:${date} ${time}
 * 项目名称:${project_name}
 *
 * @author Jiang Shan Shan
 * @version 1.0
 * @since JDK 1.7.0_79
 * 文件名称: ${file_name}
 * 类说明:
 */
public class MainActivity2 extends Activity{

    private TextView tv_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_text = (TextView)findViewById(R.id.tv_text);

        AppuserManager ap = new AppuserManager("appuser", "*", "ID=1",
                "updatetime desc", 0, 0);

        /*//把对象转化为 XML
        XStream xstream1 = new XStream();
        String string = xstream1.toXML( ap ) ;
        System.out.println( "sss"+ string );
        tv_text.setText(string);*/

        //把对象转化为 XML,并且设置别名
        XStream xstream2 = new XStream();
        xstream2.alias( "Root" , AppuserManager.class) ;   //修改别名
        String string2 = xstream2.toXML( ap ) ;//把最外层 标签com.example.hasee.myxml 改成Root
        System.out.println(  string2 );
        tv_text.setText(string2);

    }
}

第二种方法基于工具类,网上可以下载  xstream-1.4.7.jar 文件。。。。

第三种方法

工具类

 /**
     *
     * @return 生成的xml文件的字符串表示
     */
    public String produceXml(ArrayList<TableManager> list, String attr_modelName){

        StringWriter stringWriter = new StringWriter();

        try {
            // 获取XmlSerializer对象
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlSerializer xmlSerializer = factory.newSerializer();
            // 设置输出流对象
            xmlSerializer.setOutput(stringWriter);

            xmlSerializer.startDocument("utf-8", true);
            xmlSerializer.startTag(null, "Root");
            for(int i=0;i<list.size();i++){


                xmlSerializer.startTag(null, "SubModelNode");
                xmlSerializer.attribute("","ModelName",attr_modelName);


                xmlSerializer.startTag(null, "TableName");
                xmlSerializer.attribute("","DataType","String");
                xmlSerializer.text(list.get(i).getTableName());
                xmlSerializer.endTag(null, "TableName");

                xmlSerializer.startTag(null, "Fields");
                xmlSerializer.attribute("","DataType","String");
                xmlSerializer.text(list.get(i).getFields());
                xmlSerializer.endTag(null, "Fields");

                xmlSerializer.startTag(null, "Where");
                xmlSerializer.attribute("","DataType","String");
                xmlSerializer.text((list.get(i).getWhere()));
                xmlSerializer.endTag(null, "Where");

                xmlSerializer.startTag(null, "OrderBy");
                xmlSerializer.attribute("","DataType","String");
                xmlSerializer.text((list.get(i).getOrderBy()));
                xmlSerializer.endTag(null, "OrderBy");

                xmlSerializer.startTag(null, "PageIndex");
                xmlSerializer.attribute("","DataType","Int32");// xs.attribute 一定要在xs.text 的上面否则就报错
                xmlSerializer.text((list.get(i).getPageIndex()+""));
                xmlSerializer.endTag(null, "PageIndex");

                xmlSerializer.startTag(null, "PageSize");
                xmlSerializer.attribute("","DataType","Int32");
                xmlSerializer.text((list.get(i).getPageSize()+""));
                xmlSerializer.endTag(null, "PageSize");

                xmlSerializer.endTag(null, "SubModelNode");
            }
            xmlSerializer.endTag(null, "Root");
            xmlSerializer.endDocument();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return stringWriter.toString();

    }

实体类

package com.aeckj.health.bean;


/**
 * 创建日期:2017/03/29 14:56
 * @author Jiang Shan Shan
 * @version 1.0
 * @since JDK 1.7.0_79
 * 文件名称: TableManager.java
 * 类说明:对所有的表进行增删改查的操作
 */

public class TableManager {
    private String tableName;
    private String fields;
    private String where;
    private String orderBy;
    private int pageIndex;
    private int pageSize;

    public TableManager(String tableName, String fields, String where, String orderBy, int pageIndex, int pageSize) {
        this.tableName = tableName;
        this.fields = fields;
        this.where = where;
        this.orderBy = orderBy;
        this.pageIndex = pageIndex;
        this.pageSize = pageSize;
    }

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    public String getFields() {
        return fields;
    }

    public void setFields(String fields) {
        this.fields = fields;
    }

    public String getWhere() {
        return where;
    }

    public void setWhere(String where) {
        this.where = where;
    }

    public String getOrderBy() {
        return orderBy;
    }

    public void setOrderBy(String orderBy) {
        this.orderBy = orderBy;
    }

    public int getPageIndex() {
        return pageIndex;
    }

    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
}

此方法的应用

ArrayList<TableManager> list = new ArrayList<TableManager>();

TableManager ap = new TableManager("appuser", "*", "ID=1",
        "updatetime desc", 0, 0);
TableManager ap1 = new TableManager("apimanage", "*", "ID=1",
        "updatetime desc", 0, 0);

list.add(ap);
list.add(ap1);

XmlUtils xu = new XmlUtils();
String s = xu.produceXml(list,"AppUser_mod");




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值