Sax解析Xml文档
发布时间:2020-12-16 00:34:12  所属栏目:百科  来源:网络整理 
            导读:SAX(simpleAPIforXML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。 在用Sax解析xml文档的时候不要忽略节点之间的空白字符串。 下面来实例看看如何使用Sax解析下面的Xml: ?xml version='1.0
                
                
                
            | SAX(simpleAPIforXML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。 在用Sax解析xml文档的时候不要忽略节点之间的空白字符串。 下面来实例看看如何使用Sax解析下面的Xml: <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <persons> <person id="1"> <name>范冰冰</name> <age>31</age> </person> <person id="2"> <name>林志玲</name> <age>38</age> </person> <person id="3"> <name>杨幂</name> <age>26</age> </person> </persons> 1.首先写一个java类,继承DefaultHandler类 
 import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxXML extends DefaultHandler {
	private Person person;
	private List<Person> list;
	
	private String currentTag;		//用来保存当前节点名
	
	public List<Person> getPersonList(){
		return list;
	}
	
	 //文档开始调用  只调用一次
	@Override
	public void startDocument() throws SAXException {
		list=new ArrayList<Person>();
	}
	
	//开始一个节点调用
	@Override
	public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
		if(qName.equals("person")){
			person=new Person();
			person.setId(Integer.parseInt(attributes.getValue(0)));
		}
		currentTag=qName;
	}
	//读取到文本时调用
	@Override
	public void characters(char[] ch,int start,int length)
			throws SAXException {
		if(currentTag!=null){									//先判断当前节点不为空才开始操作
			String content=new String(ch,start,length);
			if(currentTag.equals("name")){
				person.setName(content);
			}else if(currentTag.equals("age")){
				person.setAge(Integer.parseInt(content));
			}
		}
	
	}
	//结束一个节点时调用
	@Override
	public void endElement(String uri,String qName)
			throws SAXException {
			if(qName.equals("person")){
				list.add(person);
				person=null;
			}
			currentTag=null;								//一个节点结束必须置空,否则将读取到节点后面的空字符串
	}
	  //结束文档时调用,只调用一次
    @Override
    public void endDocument() throws SAXException {
    }
}2.然后写一个test方法,解析xml文件,输出结果 package cn.itcast.xml;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import android.test.AndroidTestCase;
public class PersonTest extends AndroidTestCase {
	public void SaxXMLTest() throws Exception {
		// 构建SAXParser
		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
		// 实例化 DefaultHandler对象
		SaxXML handler = new SaxXML();
		// 读取xml文件
		InputStream in = PersonTest.class.getClassLoader().getResourceAsStream("persons.xml");
		 //调用parse()方法,解析xml文档
        parser.parse(in,handler);
        //返回list
        List<Person> persons = handler.getPersonList();
        //打印结果
        for (Person p : persons)
			System.out.println(p);
	}
}
输出结果如下: 
 
 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
