xml文件的生成和解析

<?xml version=‘1.0’ encoding=‘utf-8' standalone=‘yes'?>  xml文件的头
<root>	根节点						
	<string name=‘account’> 开始标签    name=‘account 属性
		haha   文本节点
	</string>  结束标签

	<string name=‘password’>
		123456
	</string>

</root>
所有的标签 不管是开始标签还是结束标签 都是元素 element

一:xml文件的生成 

1.采用组拼字符串生成xml文件
利用StringBuffer或者StringBuilder  注意特殊字符的转义

//	<头>
//	<info>
//		<student id='800001'>
//			<name>张三</name>
//			<age>18</age>
//		</student>
//	</info>
//把数据存成xml文件(跨平台)
try {
				StringBuffer sb = new StringBuffer();
				sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes'?>");
				sb.append("<info>");
				sb.append("<student id='"+id+"'>");
				sb.append("<name>"+name+"</name>");
				sb.append("<age>"+age+"</age>");
				sb.append("</student>");
				sb.append("</info>");
				File file = new File(Environment.getExternalStorageDirectory(),"info.xml");
				FileOutputStream fos = new FileOutputStream(file);
				fos.write(sb.toString().getBytes());
				fos.close();
				Toast.makeText(this, "保存学生信息成功", 0).show();
			} catch (Exception e) {
				e.printStackTrace();
				Toast.makeText(this, "保存学生信息失败", 0).show();
			}			

权限:WRITE_EXTERNAL_STORAGE

2.利用Android序列化(生成)xml文件的api

try {
				//1.创建一个xml文件的序列化器
				 XmlSerializer serializer = Xml.newSerializer();
				 //2.设置文件的输出和编码方式
				 FileOutputStream os = new FileOutputStream(new File(Environment.getExternalStorageDirectory(),"info.xml"));
				 serializer.setOutput(os, "utf-8");
				 //3.写xml文件的头
				 serializer.startDocument("utf-8", true);
				 //4.写info节点 第一个参数:命名空间 第二个参数:节点名称
				 serializer.startTag(null, "info");

				 //5.写student节点
				 serializer.startTag(null, "student");
				 //6.写属性
				 serializer.attribute(null, "id", id);

				 //7.写name
				 serializer.startTag(null, "name");
				 serializer.text(name);
				 serializer.endTag(null, "name");
				 //8.写age
				 serializer.startTag(null, "age");
				 serializer.text(age);
				 serializer.endTag(null, "age");

				 serializer.endTag(null, "student");
				 serializer.endTag(null, "info");
				//写文件的末尾
				 serializer.endDocument();
				 os.close();
				Toast.makeText(this, "保存学生信息成功", 0).show();
			} catch (Exception e) {
				e.printStackTrace();
				Toast.makeText(this, "保存学生信息失败", 0).show();
			}
二、xml文件的解析

1.DOM解析  在内存当中生成树状的xml结构
2.Dom4j
3.SAX    基于事件的解析 自上而下的解析
4.pull解析
类似sax解析,不过写起来更加的简单,容易理解,内存开销小,速度快

//解析放在assets里的info.xml文件

		try {
			InputStream is = this.getAssets().open("info.xml");
			//解析info.xml文件
			//1.得到xml文件的解析器
			XmlPullParser parser = Xml.newPullParser();
			//2.设置输入流 和编码
			parser.setInput(is, "utf-8");
			//3.解析xml文件,获取当前的事件类型. 
			int type = parser.getEventType();
			while(type!=XmlPullParser.END_DOCUMENT){
				System.out.println(parser.getEventType()+"----"+parser.getName());//当前事件节点的名字
				//移动解析器到下一个节点
				type = parser.next();
			}
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

例子:



<?xml version="1.0" encoding="utf-8" ?> 
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
  <string>北京</string> 
  <string>-5℃/7℃</string> 
  <string>1月9日 晴转晴</string> 
  <string>北风3-4级转无持续风向微风</string> 
  <string>穿衣指数:冷。旅游指数:一般。温度稍低,风稍大,外出注意防风保暖。</string> 
</ArrayOfString>
try {
			XmlPullParser parser = Xml.newPullParser();
			// 设置解析器的参数
			InputStream is =getAssets().open("getWeatherbyCityName.xml");
			parser.setInput(is,"utf-8");

			List<String> infos = new ArrayList<String>();
			int type = parser.getEventType();
			while(type!=XmlPullParser.END_DOCUMENT){
				if(type==XmlPullParser.START_TAG){//当前是开始节点.
					if("string".equals(parser.getName())){
						String info = parser.nextText();
						infos.add(info);
					}
				}
				type = parser.next();//只要不解析到文档的末尾就不停的解析下一个节点
			}
			is.close();
			String cityname = infos.get(0);
			String temp = infos.get(1);
			String weather = infos.get(2);
			String wind = infos.get(3);
			String wearinfo = infos.get(4);
			TextView tv = (TextView) findViewById(R.id.tv_info);
			tv.setText("城市名称:"+cityname+"\n温度:"+temp+"\n天气信息:"+weather+"\n风力:"+wind+"\n穿衣指数:"+wearinfo);
			
		} catch (Exception e) {
			e.printStackTrace();
		}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值