一个序列化器,满足多个xml文件生成

来源:互联网 发布:手机cms 编辑:程序博客网 时间:2024/06/11 20:50


公司请求一律是xml的格式,就算一个id也好都是一个xml文件。所以参数不类型,不可能生成一个的xml文件,就要写一个序列化器。


NetworkHelper类中
公用序列化器:

public static void toXML(final String filename, final List<KeyValue> data, final Handler handler){    new Thread() {        public void run() {            FileOutputStream fos = null;
    //StringWriter writer=new StringWriter();
            try {                XmlSerializer serializer = Xml.newSerializer();                File f=new File(Path + filename);                File file = new File(Path);                if (!file.exists()) {                    file.mkdirs();                }                fos = new FileOutputStream(f);                serializer.setOutput(fos, "UTF-8");
//serializer.setOutput(writer);//不保存,获取字符串                serializer.startDocument("UTF-8", true);                int frontlevel=-1;//前一级别                List<String> endTags=new ArrayList<String>();//结束尾保存                for(KeyValue kv:data){                    try{                        
while(frontlevel>=kv.getLevel()) {    serializer.endTag(null,endTags.get(endTags.size()-1));    endTags.remove(endTags.size()-1);    frontlevel=frontlevel-1;}
frontlevel=kv.getLevel(); serializer.startTag(null, kv.getK()); if(!kv.getV().equals("")){ serializer.text(kv.v); } endTags.add(kv.getK()); }catch (Exception e) { e.printStackTrace(); } } //结束尾补全 if(endTags.size()>0){ for(int i=endTags.size()-1;i>=0;i--){ serializer.endTag(null,endTags.get(i)); } } serializer.endDocument(); handler.sendEmptyMessage(202);//生成了xml通知一下 } catch (Exception e) { e.printStackTrace(); }finally { try { fos.close(); } catch (Exception e) { e.printStackTrace(); } } } }.start();}


KeyValue类:

public class KeyValue {    public String k;//字段    public String v;//值    public int level;//级别    public KeyValue() {    }    public KeyValue(int level, String k, String v) {        this.k = k;        this.v = v;        this.level = level;    }
}


调用:

List<KeyValue> dt=new ArrayList<KeyValue>();dt.add(new KeyValue(0,"一级",""));dt.add(new KeyValue(1,"二级",""));
dt.add(new KeyValue(2,"三级",""));
dt.add(new KeyValue(3,"四级","字段值41"));
dt.add(new KeyValue(1,"二级","字段值22"));

NetworkHelper.toXML("file.xml",dt,handler);

0 0