技术开发 频道

面试必备:Android笔试总结

  (1)使用SAX读取XML文件;它采用的是事件驱动,并不需要解析完整个文档,速度快并且占用内存少。需要为SAX提供实现ContentHandler接口的类。

  PersonDefaultHandler.java

import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.sinber.domain.Person;
public class PersonDefaultHandler extends DefaultHandler
{
private List<Person> persons;
private Person person ; //记录当前person
private String perTag; //记录前一个标签的名称 /** * 重写父类的开始文档方法。用于初始化 */
@Override
public void startDocument()
throws SAXException {
persons
= new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if("person".equals(localName)){
Integer id
= new Integer(attributes.getValue(0)); //取id
person = new Person();
person.setId(id);
}
perTag
= localName;
}
/**参数: * ch 整个XML字符串 * start 节点值在整个XML字符串中的索引位置 * length 节点值的长度 */
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(perTag!=null){
String data
= new String(ch,start,length);
if("name".equals(perTag)){
person.setName(data);
}
else if("age".equals(perTag)){
person.setAge(
new Short(data));
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("person".equals(localName)){
persons.add(person);
person
= null;
}
perTag
= null;
}
public List<Person> getPersons() {
return persons;
}
}

  SAXPerson.java

import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.sinber.domain.Person;
public class SAXPerson{
    
public static List<Person> getPerson() throws Exception{        //通过类装载器获取文件
        InputStream inStream = SAXPersonService.class.getClassLoader().getResourceAsStream("person.xml");
        SAXParserFactory factory
= SAXParserFactory.newInstance();
         SAXParser saxParser
= factory.newSAXParser();
        PersonDefaultHandler handler
= new PersonDefaultHandler();
        saxParser.parse(inStream, handler);
        inStream.close();
                
return handler.getPersons();
    }
}
0
相关文章