技术开发 频道

面试必备:Android笔试总结

  (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;
public class DOMPerson {
public static List<Person> getPerson() throws Exception{
List
<Person> pers = new ArrayList<Person>();
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<persons.getLength();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<childNodes.getLength();
j
++;
{
Node childNode
= childNodes.item(j);
if(childNode.getNodeType()==Node.ELEMENT_NODE){
Element element
= (Element)childNode;
if("name".equals(childNode.getNodeName())){ person.setName(new String(element.getFirstChild().getNodeValue()));
}
else if("age".equals(childNode.getNodeName())){
person.setAge(
new Short(element.getFirstChild().getNodeValue()));
}
}
}
pers.add(person);
}
inStream.close();
return pers;
}
}

  (3)使用Pull解析器读取XML文件

  PullPerson.java

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.os.Environment;
import android.util.Xml;
import com.sinber.domain.Person;
public class PullPerson {
public static void save(List<Person> persons) throws Exception{
XmlSerializer serializer
= Xml.newSerializer();
File file
= new File(Environment.getExternalStorageDirectory(),"person.xml");
FileOutputStream outStream
= new FileOutputStream(file);
serializer.setOutput(outStream,
"UTF-8");
serializer.startDocument(
"UTF-8", true);
serializer.startTag(
"", "persons");
for(Person person:persons){
serializer.startTag(
"", "person"); //person serializer.attribute("", "id", ""+person.getId());
serializer.startTag("", "name"); //name
serializer.text(person.getName());
serializer.endTag(
"", "name"); //name serializer.startTag("", "age"); //age
serializer.text(person.getAge().toString());
serializer.endTag(
"", "age");//age serializer.endTag("", "person"); //person
}
serializer.endTag(
"", "persons");
serializer.endDocument();
outStream.close();
}
public static List<Person> getPersons() throws Exception{
List
<Person> persons = null;
Person person
= null;
XmlPullParser parser
= Xml.newPullParser();
InputStream inStream
= PullPersonService.class.getClassLoader().getResourceAsStream("person.xml");
parser.setInput(inStream,
"UTF-8");
int eventType = parser.getEventType();
//触发第一个事件
while(eventType!=XmlPullParser.END_DOCUMENT){
switch(eventType){
case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG: //开始元素事件
if("person".equals(parser.getName())){
person
= new Person();
person.setId(
new Integer(parser.getAttributeValue(0)));
}
else if(person!=null){
if("name".equals(parser.getName())){
person.setName(parser.nextText());
}
else if("age".equals(parser.getName())){
person.setAge(
new Short(parser.nextText()));
}
}
break;
case
XmlPullParser.END_TAG:
//结束元素事件
if("person".equals(parser.getName())){
persons.add(person);
person
= null;
}
break; default: break;
}
eventType
= parser.next();
}
return persons;
}
}

  以上三种方式任选其一即可。

0
相关文章