①先说一下将数据导成xml的优点:

1)XML文档的内容和结构完全分离

2)互操作性强

大多数纯文本的文件格式都具有这个优点。纯文本文件可以方便地穿越防火墙,在不同操作系统上的不同系统之间通信。而作为纯文本文件格式,XML同样具有这个优点。

3)规范统一

XML具有统一的标准语法,任何系统和产品所支持的XML文档,都具有统一的格式和语法。这样就使得XML具有了跨平台跨系统的特性。作为对比,同样作为文本语言,JavaScript的标准就远没有XML这样统一

4)支持多种编码
相对于普通文本文档而言,XML文档本身包含了所使用编码的记录,这方便了多语言系统对数据的处理。

5)可扩展性
XML是一种可扩展的语言,可以根据XML的基本语法来进一步限定使用范围和文档格式,从而定义一种新的语言。例如:MathML(数学标记语言)、CML(化学标记语言)和TecML(技术数据标记语言),每种语言都用于其特定的环境。

②Android中通过Xml序列化器将数据导出为xml文件

已经在注释中说明了如何使用XmlSerializer进行xml数据的拼接



private class MyTask extends AsyncTask<Void, Void, Boolean> {
		List<Person> list = new ArrayList<>();
		@Override
		protected void onPreExecute() {
			for (int i = 0; i < 5; i++) {
				Person person = new Person(i+"", "张三", 20+i);
				list.add(person);
			}

			super.onPreExecute();
		}
		
		@Override
		protected Boolean doInBackground(Void... params) {
			//首先拿到xml序列化器
			XmlSerializer xmlSerializer = Xml.newSerializer();
			
			try {
				File file = new File(Environment.getExternalStorageDirectory(),"person.xml");
				FileOutputStream os = new FileOutputStream(file);
				//实例化,将数据导出为utf-8的person.xml文件
				xmlSerializer.setOutput(os, "utf-8");
				//设置xml表头,相当于<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
				xmlSerializer.startDocument("utf-8", true);
				//persons根节点
				xmlSerializer.startTag(null, "persons");
				for (int i = 0; i < list.size(); i++) {
					//一个person对象的根节点
				xmlSerializer.startTag(null, "person");
				//各个属性的开始节点
				xmlSerializer.startTag(null, "sno");
				xmlSerializer.text(list.get(i).getSno()+i);
				xmlSerializer.endTag(null, "sno");

				xmlSerializer.startTag(null, "sname");
				xmlSerializer.text(list.get(i).getSname()+i);
				xmlSerializer.endTag(null, "sname");

				xmlSerializer.startTag(null, "sage");
				xmlSerializer.text(list.get(i).getSage()+1+"");
				xmlSerializer.endTag(null, "sage");
				
				xmlSerializer.endTag(null, "person");
				}
				xmlSerializer.endTag(null, "persons");
				xmlSerializer.endDocument();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return false;
			}
			

			return true;
		}
		@Override
		protected void onPostExecute(Boolean result) {
			// TODO Auto-generated method stub
			super.onPostExecute(result);
				Toast.makeText(getApplicationContext(),result+"", 1).show();
		}
	}

导出后的数据效果图:

Android 编辑xml 卡 安卓xml文件编辑器_xml

③XmlSerializer拼接与字符串拼接作比较

直接用字符串拼接数据的时候,如果数据中有特殊符号,如尖括号<>等,将会导致拼接成的xml中格式解析出现错误,而且用StringBuffer进行拼接的时候想对于XmlSerializer来说更消耗资源。(因字符串拼接比较简单,且不推荐使用,所以就不在这写字符串拼接成xml的写法了)

XmlSerializer既可以避免数据中有特殊符号导致的数据格式问题,也可以更加节省系统资源。(能省则省嘛)