package com.hnust.util;
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 android.util.Log;
import com.hnust.pojo.Person;
/***
* dom解析的工具类
* @author zzg
*
*/
public class DOMXMLService {
private final static String TAG="DOMXMLService";
public static List<Person> getPerson(InputStream is) throws Exception{
List<Person> persons=new ArrayList<Person>();
//获取dom解析的工厂实例
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(is);
//返回文档的根元素
Element root=document.getDocumentElement();
//获取person节点的元素
NodeList personNode=root.getElementsByTagName("person");
for(int i=0;i<personNode.getLength();i++){
Element personElement = (Element) personNode.item(i);
int id=new Integer(personElement.getAttribute("id"));
Log.i(TAG, id+"");
Person person=new Person();
person.setId(id);
NodeList childNodes=personElement.getChildNodes();
for(int j=0;j<childNodes.getLength();j++){
if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){
if("name".equals(childNodes.item(j).getNodeName())){
String name=childNodes.item(j).getFirstChild().getNodeValue();
Log.i(TAG, name);
person.setName(name);
}else if("age".equals(childNodes.item(j).getNodeName())){
String age=childNodes.item(j).getFirstChild().getNodeValue();
Log.i(TAG, age);
person.setAge(Integer.parseInt(age));
}
}
}
persons.add(person);
}
is.close();
return persons;
}
}
package com.hnust.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
import com.hnust.pojo.Person;
/**
* pull解析xml工具类
* pull解析器为Android内置的
* @author zzg
*
*/
public class PullXMLService {
public static List<Person> getPerson(InputStream is) throws Exception{
Person person=null;
List<Person> persons=null;
XmlPullParser pullParser=Xml.newPullParser();
pullParser.setInput(is,"UTF-8");
//触发时间类型
int event=pullParser.getEventType();
while(event!=XmlPullParser.END_DOCUMENT){//跳出循环的条件是结束解析
switch (event) {
case XmlPullParser.START_DOCUMENT://开始解析
persons=new ArrayList<Person>();
break;
case XmlPullParser.START_TAG://开始元素
if("person".equals(pullParser.getName())){
int id=Integer.parseInt(pullParser.getAttributeValue(0));
person=new Person();
person.setId(id);
}
if(person!=null){
if("name".equals(pullParser.getName())){
person.setName(pullParser.nextText());
}
if("age".equals(pullParser.getName())){
person.setAge(Integer.parseInt(pullParser.nextText()));
}
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
persons.add(person);
person=null;
}
break;
default:
break;
}
event=pullParser.next();
}
return persons;
}
/***
* pull生成xml
* @param persons
* @param out
* @throws Exception
*/
public static void save(List<Person> persons,OutputStream out) throws Exception{
XmlSerializer serializer=Xml.newSerializer();
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for(Person person:persons){
serializer.startTag(null, "person");
serializer.attribute(null,"id",String.valueOf(person.getId()));
serializer.startTag(null,"name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null,"age");
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "name");
serializer.endTag(null, "person");
}
serializer.endTag(null,"persons");
serializer.endDocument();
out.flush();
out.close();
}
}
AssetManager asset=getAssets();
InputStream is=asset.open("person.xml");
List<Person> persons=null;
StringBuilder sb=new StringBuilder();
switch(v.getId()){
case R.id.sax_button:
//sax解析xml文件
SAXForHandler handler=new SAXForHandler();
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser parser=spf.newSAXParser();
parser.parse(is, handler);
persons=handler.getPerson();
for(Person person:persons){
sb.append(person.toString());
}
Toast.makeText(this, sb,1).show();
break;
case R.id.pull_button:
persons=PullXMLService.getPerson(is);
if(persons.size()==0){
Toast.makeText(this, "persons is null",1).show();
}
for(Person person:persons){
sb.append(person.toString());
}
Toast.makeText(this, sb,1).show();
break;
case R.id.dom_button:
//dom解析xml文件
persons=DOMXMLService.getPerson(is);
if(persons.size()==0){
Toast.makeText(this, "persons is null",1).show();
}
for(Person person:persons){
sb.append(person.toString());
}
Toast.makeText(this, sb,1).show();
break;