android中使用pull方式解析sdcard中的xml文件实例

Android中常见的xml解析方式有sax、dom和pull,下面我们就看一个小巧轻便,解析方便,速度很快的pull方式的实例。

先建一个xml吧:mission.xml
<?xml version="1.0" encoding="UTF-8" ?>
<region id="region_1" width="100" height="800">
	<element id="1" type="20">Chinese</element>
	<element id="2" type="20">English</element>
</region>

建region的实体: Region.java
package com.hebaijun.xmlparser;

import java.util.List;

public class Region {
	private String id;
	private int width;
	private int height;
	private List<Element> elements;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public int getWidth() {
		return width;
	}
	public void setWidth(int width) {
		this.width = width;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public List<Element> getElements() {
		return elements;
	}
	public void setElements(List<Element> elements) {
		this.elements = elements;
	}

}

Element的实体:Element.java
package com.hebaijun.xmlparser;

public class Element {
	private String id;
	private String type;
	private String value;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
}

最后是实例代码:
package com.hebaijun.xmlparser;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
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.util.Log;

public class XmlParserActivity extends Activity {
    /** Called when the activity is first created. */
	Region region;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //取xml的路径
        String xmlPath = getExternalStoragePath() + "/mission.xml";
        try {
			region = parser(xmlPath);
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
        //打印一些结果
        Log.v("region_id", region.getId());
        for (Element element : region.getElements()) {
        	Log.v("element_value", element.getValue());
		}
    }
    
    //获取sdcard路径
  	public static String getExternalStoragePath(){
  		//获取状态
  		String state = android.os.Environment.getExternalStorageState();
  		//判断是否可读
  		if (android.os.Environment.MEDIA_MOUNTED.equals(state)) {
  			if (android.os.Environment.getExternalStorageDirectory().canRead()) {
  				return android.os.Environment.getExternalStorageDirectory().getPath();
  			}
  		}
  		return null;
  	}
  	
  	public Region parser(String path) throws XmlPullParserException, IOException{
		File xmlFile = new File(path);
		Element xmlElement = null;
		List<Element> xmlElements = null;
		Region xmlRegion = null;
		if (xmlFile.exists()) {
			InputStream slideInputStream = new FileInputStream(path);
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
	        factory.setNamespaceAware(true); 
	        XmlPullParser xpp = factory.newPullParser();
	        xpp.setInput(slideInputStream, "UTF-8");
	        int eventType = xpp.getEventType(); 
	        while (eventType != XmlPullParser.END_DOCUMENT) { 
	        	if(eventType == XmlPullParser.START_DOCUMENT) { 
	        		
	        	} else if(eventType == XmlPullParser.START_TAG) { 
	        		String startName = xpp.getName();
	        		if (startName.equalsIgnoreCase("region")) {
	        			xmlRegion = new Region();
	        			xmlElements = new ArrayList<Element>();
	        			int count = xpp.getAttributeCount();
	        			for (int i = 0; i < count; i++) {
	        				String name = xpp.getAttributeName(i);
	        				String value = xpp.getAttributeValue(i);
	        				if (name.equalsIgnoreCase("id")) {
	        					xmlRegion.setId(value);
	        				} else if (name.equalsIgnoreCase("width")) {
	        					xmlRegion.setWidth(Integer.parseInt(value));
	        				} else if (name.equalsIgnoreCase("height")) {
	        					xmlRegion.setHeight(Integer.parseInt(value));
	        				}
	        			}
					} else if (startName.equalsIgnoreCase("element")) {
						xmlElement = new Element();
						int count = xpp.getAttributeCount();
	        			for (int i = 0; i < count; i++) {
	        				String name = xpp.getAttributeName(i);
	        				String value = xpp.getAttributeValue(i);
	        				if (name.equalsIgnoreCase("id")) {
	        					xmlElement.setId(value);
	        				} else if (name.equalsIgnoreCase("type")) {
	        					xmlElement.setType(value);
	        				}
	        			}
	        			//元素的text值
	        			xpp.next();
	        			xmlElement.setValue(xpp.getText());
					} 
	        	} else if(eventType == XmlPullParser.END_TAG) { 
	        		String endName = xpp.getName();
	        		if (endName.equalsIgnoreCase("region")) {
	        			if (xmlElements != null) {
							xmlRegion.setElements(xmlElements);
						}
					} else if (endName.equalsIgnoreCase("element")) {
						xmlElements.add(xmlElement);
					}
	        	}
	        	//下一个元素
	        	eventType = xpp.next(); 
	        } 
	        
	        //关闭输入流
	        if (slideInputStream != null) {
	        	slideInputStream.close();
	        	slideInputStream = null;
			}
		}
		return xmlRegion;
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值