Android学习第七天————通过android提供的XmlPullParserFactory解析XML文件

示例代码

XML文件

<?xml version="1.0" encoding="UTF-8"?><users><user><name>小王</name><age>22</age></user><user><name>小李</name><age>23</age></user><user><name>萧晨</name><age>24</age></user></users>


public class XmlUnil {
	private InputStream input;
	public XmlUnil(InputStream input){
		this.input=input;
	}
	public List<User> parse(){
		XmlPullParserFactory factory=null;
		XmlPullParser xpp=null;
		List<User> userlist=null;
		try {
			//从XML解析工厂中获得工厂实例
			factory = XmlPullParserFactory.newInstance();
			factory.setNamespaceAware(true);
			//获得XML解析器
			xpp=factory.newPullParser();
			//获得输入流
			xpp.setInput(new InputStreamReader(input));
			
			//获得当前节点的事件类型
			int eventType=xpp.getEventType();
			//得到标签的名称
			String tagName=null;
			User user=null;
			//当不是结束根节点是循环每个节点
			while(eventType!=XmlPullParser.END_DOCUMENT){
				if(eventType==XmlPullParser.START_DOCUMENT){//如果是文档的开始,创建集合
					userlist=new ArrayList<User>();
					System.out.println("--------获得集合对象");
				}
				else if(eventType==XmlPullParser.START_TAG){//如果是开始标签
					//得到开始标签的名称
					tagName=xpp.getName();
					if(tagName.equals("user")){//如果标签名称是user
						user=new User();
						System.out.println("实例化用户对象");
					}
				}else if(eventType==XmlPullParser.TEXT){//如果是标签类型是文本
					if(tagName.equals("name")){//如果文本标签的前一个标签是name标签
						user.setName(xpp.getText());
						System.out.println("设置name");
					}else if(tagName.equals("age")){//如果文本标签的前一个标签是age标签
						user.setAge(Integer.parseInt(xpp.getText()));
						System.out.println("设置age");
					}
				}else if(eventType==XmlPullParser.END_TAG){//如果是结束标签
					tagName=xpp.getName();
					if(tagName.equals("user")){//结束标签式user,将其添加到集合中
						userlist.add(user);
						System.out.println("添加进集合");
					}
				}
				eventType=xpp.next();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return userlist;
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值