Android筆試總結(2)

發表于:2013-06-03來源:Csdn作者:xyz_lmn點擊數: 標簽:Android
(1)使用SAX讀取XML文件;它采用的是事件驅動,并不需要解析完整個文檔,速度快并且占用內存少。需要為SAX提供實現ContentHandler接口的類。 PersonDefaultHandle

  (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;

  publicclass PersonDefaultHandler extends DefaultHandler {

  private List persons;

  private Person person ; //記錄當前person

  private String perTag; //記錄前一個標簽的名稱

  /**

  * 重寫父類的開始文檔方法。用于初始化

  */

  @Override

  publicvoid startDocument() throws SAXException {

  persons =new ArrayList();

  }

  @Override

  publicvoid 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

  publicvoid 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);

  }elseif("age".equals(perTag)){

  person.setAge(new Short(data));

  }

  }

  }

  @Override

  publicvoid endElement(String uri, String localName, String qName)

  throws SAXException {

  if("person".equals(localName)){

  persons.add(person);

  person =null;

  }

  perTag =null;

  }

  public List 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;

  publicclass SAXPerson{

  publicstatic List 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();

  }

  }

  (2)DOM解析XML文件時,會將XML文件的所有內容讀取到內存中,然后允許您使用DOM API遍歷XML樹、檢索所需的數據。

  DOMPerson.java

  import java.io.InputStream;

  import java.util.ArrayList;

  import java.util.List;

  import javax.xml.parsers.DocumentBuilder;

  import javax.xml.parsers.DocumentBuilderFactory;

  import org.w3c.dom.Document;

  import org.w3c.dom.Element;

  import org.w3c.dom.Node;

  import org.w3c.dom.NodeList;

  import com.sinber.domain.Person;

  publicclass DOMPerson {

  publicstatic List getPerson() throws Exception{

  List pers =new ArrayList();

  InputStream inStream = SAXPersonService.class.getClassLoader().getResourceAsStream("person.xml");

  DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();

  DocumentBuilder builder = factory.newDocumentBuilder();

  Document dom = builder.parse(inStream);

  Element root = dom.getDocumentElement();

  NodeList persons = root.getElementsByTagName("person");

  for(int i=0;i

  Element personNode =(Element)persons.item(i);

  Person person =new Person();

  person.setId(new Integer(personNode.getAttribute("id")));

  NodeList childNodes = personNode.getChildNodes();

  for(int j=0;j

  Node childNode = childNodes.item(j);

  if(childNode.getNodeType()==Node.ELEMENT_NODE){

  Element element = (Element)childNode;

  if("name".equals(childNode.getNodeName())){

原文轉自:http://blog.csdn.net/xyz_lmn/article/details/6922224

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97