android_sax解析

1.MyHandler

package com.sax.xml;

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

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

public class MyHandler extends DefaultHandler {
	private HashMap<String,String> map=null;//存储单个解析的完整对象
	private List<HashMap<String,String>> list=null;//存储所有的解析对象
	private String currentTag=null;//正在解析的元素标签
	private String currentValue=null;//解析当前元素的值 
	private String nodeName=null;//解析当前的节点名称
	public MyHandler(String nodeName) {
		this.nodeName=nodeName;
	}
	public List<HashMap<String,String>> getList(){
		return list;
	}
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		//这个方法用来处理xml文件所读取到的内容
		if(currentTag !=null && map !=null){
			currentValue= new String(ch,start,length);
			if(currentValue !=null && !currentValue.trim().equals("")
					&& !currentValue.trim().equals("\n")){
				map.put(currentTag, currentValue);
			}
		}
		currentTag=null;//把当前节点对应的值和标签设置为空
		currentValue=null;
	}

	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		//遇到结束标记的时候,会调用这个方法
		if(qName.equals(nodeName)){
			list.add(map);
			map=null;
		}
	}

	@Override
	public void startDocument() throws SAXException {
		//当读到第一个开始标签的时候,会触发这个方法
		list=new ArrayList<HashMap<String,String>>();
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		//当遇到文档开头的时候,调用这个方法
		if(qName.equals(nodeName)){
			map=new HashMap<String,String>();
		}
		if(attributes !=null && map !=null){
			for(int i=0;i<attributes.getLength();i++){
				map.put(attributes.getQName(i), attributes.getValue(i));
			}
		}
		currentTag=qName;
	}

}

2.SaxService

package com.sax.service;

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

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

import org.xml.sax.SAXException;

import com.sax.xml.MyHandler;

public class SaxService {

	public SaxService() {
		// TODO Auto-generated constructor stub
	}
	public static List<HashMap<String,String>> readXML(
			InputStream inputStream,String nodeName){
		
		try {
			//创建一个解析xml的工厂对象
			SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
			SAXParser saxparser=saxParserFactory.newSAXParser();//解析xml
			MyHandler handler=new MyHandler(nodeName);
			saxparser.parse(inputStream, handler);
			inputStream.close();
			return handler.getList();
		}catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
				return null;
		
	}

}

3.HttpUtils

package com.sax.httputils;

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

public class HttpUtils {

	public HttpUtils() {
		// TODO Auto-generated constructor stub
	}
	public static InputStream getXML(String path){
		InputStream inputStream=null;
		URL url;
		try {
			url = new URL(path);
			if(url !=null){
				HttpURLConnection httpUrlConnection=(HttpURLConnection) url
						.openConnection();
				httpUrlConnection.setConnectTimeout(3000);
				httpUrlConnection.setDoInput(true);
				httpUrlConnection.setRequestMethod("GET");
				int code= httpUrlConnection.getResponseCode();
				if(code==200){
					inputStream = httpUrlConnection.getInputStream();
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return inputStream;
		
	}

}

4.Test

package com.sax.test;

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

import com.sax.httputils.HttpUtils;
import com.sax.service.SaxService;

public class Test {

	public Test() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String path="http://192.168.2.105:8080/mp3/users.xml";
		InputStream inputStream=HttpUtils.getXML(path);
		List<HashMap<String,String>> list=SaxService.readXML(inputStream, "user");
		for(HashMap<String,String> map:list){
			System.out.println(map.toString());
		}

	}

}

所读取的users.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<users>
	<user id="1">
       <name>Jack</name>
	   <age>32</age>
	</user>	
	<user id="2">
       <name>rose</name>
	   <age>31</age>
	</user>	
</users>

输出信息:

{id=1, age=32, name=Jack}
{id=2, age=31, name=rose}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值