android学习之使用pull方式解析xml

本文介绍了一种使用Pull方式解析XML文件的方法,并提供了一个具体的Android应用程序示例,演示了如何从XML文件中读取并解析数据到实体类。

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

用pull方式解析xml:

xml文件

<?xml version="1.0" encoding="utf-8"?>
<apps>
    <app>
        <id>1</id>
        <name>Google Map</name>
        <version>1.0</version>
    </app>
    <app>
        <id>2</id>
        <name>Chrome</name>
        <version>2.0</version>
    </app>
    <app>
        <id>1</id>
        <name>Google Play</name>
        <version>3.0</version>
    </app>
</apps>

实体类

package com.example.testxml;

public class App {
	
	private String id;
	private String name;
	private String version;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getVersion() {
		return version;
	}
	public void setVersion(String version) {
		this.version = version;
	}
	
	@Override
	public String toString() {
		System.out.println("Id:"+getId()+",Name:"+getName()+",Version:"+getVersion()+"\n");
		return null;
	}
	
	
}


主活动

package com.example.testxml;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {
  
	public  List<App> apps;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		String rs =getString();
		//System.out.println("结果为:"+rs);
		
		try {
			List<App> res= PullXML(rs);
			for(App ap:res){
				ap.toString();
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
		
	}
	
	/**
	 * 
	 * @以字符流方式读取xml文件类容,返回字符串结果
	 */
	private String getString(){
		try {
			InputStreamReader isr = new InputStreamReader(getAssets().open("test.xml"),"UTF-8");
			BufferedReader br =new BufferedReader(isr);
			String line=null;
			StringBuilder sb =new StringBuilder();
            while((line=br.readLine())!=null){
            	sb.append(line);
            }		
            isr.close();
            return sb.toString();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	/**
	 * 通过xml字符串,解析内容存储到集合
	 * @param xml
	 * @return
	 * @throws IOException
	 */
	private List<App> PullXML(String xml) throws IOException{
	    apps =new ArrayList<App>();
		try {
			XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
			XmlPullParser parser =factory.newPullParser();
		    parser.setInput(new StringReader(xml));
			int eventType =parser.getEventType();
			String id="";
			String name="";
			String version="";
			
			while(eventType!=XmlPullParser.END_DOCUMENT){
				String nodeName =parser.getName();
				App app =new App();
				switch (eventType) {
				case XmlPullParser.START_TAG:
					if("id".equals(nodeName)){
						id=parser.nextText();
						
					}else if("name".equals(nodeName)){
						name=parser.nextText();
						
					}else if("version".equals(nodeName)){
						version=parser.nextText();
					}
					break;
				case XmlPullParser.END_TAG:
					if("app".equals(nodeName)){
						app.setId(id);
						app.setName(name);
						app.setVersion(version);
						apps.add(app);
					}
					break;
				default:
					break;
				}
				
				eventType=parser.next();
			}
			
			
		} catch (XmlPullParserException e) {

			e.printStackTrace();
		}
		return apps;
	}

	
	

	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值