android使用sax解析xml

新建一个类继承DefaultHandler

package com.sax.handler;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyHandler2 extends DefaultHandler {
	private String currentTag=null;
	private String currentValue=null;
	private String nodeName=null;
	private HashMap<String, String> map=null;
	private List<HashMap<String, String>> list=null;

	public List<HashMap<String, String>> getList() {
		return list;
	}

	public MyHandler2(String nodeName) {
		// TODO Auto-generated constructor stub
		this.nodeName=nodeName;
	}
	
	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		list=new ArrayList<HashMap<String,String>>();
	}
	
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		if (qName!=null && !qName.equals("")&&qName.equals(nodeName)) {
			map=new HashMap<String, String>();
		}
		currentTag=qName;
	}
	
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		if (map!=null && currentTag!=null ) {
			currentValue=new String(ch, start, length);
			if (currentValue!=null && !currentValue.equals("")
					&&!currentValue.startsWith("\n")) {
				map.put(currentTag, currentValue);
			}
		}
		currentTag=null;
		currentValue=null;
	}
	
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		if (qName!=null&&qName.equals(nodeName)) {
			list.add(map);
		}
	}

}

一个HttpUtils2类

package com.sax.http;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class HttpUtils2 {

	public HttpUtils2() {
		// TODO Auto-generated constructor stub
	}
	public InputStream getXML(String path){
		InputStream inputStream=null;
		URL url;
		try {
			url = new URL(path);
			HttpURLConnection httpUrlConnection=(HttpURLConnection) url.openConnection();
			httpUrlConnection.setConnectTimeout(3000);
			httpUrlConnection.setRequestMethod("GET");
			if (httpUrlConnection.getResponseCode()==200) {
				 inputStream=httpUrlConnection.getInputStream();
				
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return inputStream;
	}

}


一个SaxService2类

package com.sax.service;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import com.sax.handler.MyHandler2;
import com.sun.org.apache.xerces.internal.parsers.SAXParser;

public class SaxService2 {

	public SaxService2() {
		// TODO Auto-generated constructor stub
	}
	public List<HashMap<String, String>> parseXML(InputStream is,MyHandler2 dh){
		List<HashMap<String, String>> list=null;
		SAXParserFactory factory=SAXParserFactory.newInstance();
		try {
			javax.xml.parsers.SAXParser saxParser=factory.newSAXParser();
			saxParser.parse(is, dh);
			 list=dh.getList();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

}


测试类
package com.sax.test;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import com.sax.handler.MyHandler2;
import com.sax.http.HttpUtils2;
import com.sax.service.SaxService2;

public class Test2 {

	public Test2() {
		// TODO Auto-generated constructor stub
	}
	public static void main(String[] args) {
		System.out.println("My test....");
		SaxService2 service=new SaxService2();
		MyHandler2 hd=new MyHandler2("person");
		HttpUtils2 util=new HttpUtils2();
		String path = "http://127.0.0.1:8080/person.xml";
		InputStream inputStream=util.getXML(path);
		List<HashMap<String, String>> list=service.parseXML(inputStream, hd);
		for (HashMap<String, String> hashMap : list) {
			System.out.println(hashMap.toString());
		}
	}
}


把如下xml文件放到tomcat中,就可以就行测试读取xml文件了

<?xml version="1.0" encoding="GBK"?>
<persons>
	<person>
		<id>23</id>
		<name>张三</name>
		<age>30</age>
	</person>
	<person>
		<id>20</id>
		<name>李四</name>
		<age>25</age>
	</person>
</persons>

使用SAX的优点是:
因为SAX的优势是流的方式处理,当遇到一个标签的时候,并不会记录下当前所碰到的标签。
也就是说,startEelment方法中,你所知道的信息,仅仅是当前的签名的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元素与其他结构相关的信息,都是不知道的



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值