Dom与Pull方式解析XML文件
2013-05-26 17:05
387 查看
1. Dom方式解析
public class DomStudentService
{
public static List<Student> readStudentXML(InputStream input)
{
try
{
List<Student> list = new ArrayList<Student>();
Student stu = null;
DocumentBuilderFactory domBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder = domBuilderFactory.newDocumentBuilder();
Document dom = domBuilder.parse(input);
Element root = dom.getDocumentElement();
NodeList stuList = root.getElementsByTagName("Student");
for(int i = 0; i < stuList.getLength(); i++)
{
stu = new Student();
Element stuNode = (Element)stuList.item(i); /* Element继承自Node,并不是每个Node都是Element,/n/t也是Node */
/*set id*/
stu.setId(stuNode.getAttribute("id")); /*获取属性值*/
NodeList stuChilds = stuNode.getChildNodes();
for(int j = 0; j < stuChilds.getLength(); j++)
{
if(stuChilds.item(j).getNodeType() != Node.ELEMENT_NODE) /* 判断Node类型是否为Element */
{
continue ;
}
Node childElement = stuChilds.item(j);
/*set name*/
if("name".equals(childElement.getNodeName()))
{
stu.setName(childElement.getFirstChild().getNodeValue());
/*获取标签内的文本*/
}
/*set age*/
else if("age".equals(childElement.getNodeName()))
{
stu.setAge(Integer.parseInt(childElement.getFirstChild().getNodeValue()));
}
}
list.add(stu);
}
return list;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
2.Pull方式解析
pull方式基本与SAX方式一致,事件是由自己触发,性能比较高,与SAX差不多。
public static List<Student> readStudentXml(InputStream input)
{
List<Student> list = null;
Student stu = null;
try
{
XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser pullParser = pullParserFactory.newPullParser();
pullParser.setInput(input, "UTF-8");
int type = pullParser.getEventType(); /*第一次获取事件*/
while(type != XmlPullParser.END_DOCUMENT)
/*遇到文档结束事件,循环终止*/
{
switch(type)
{
case XmlPullParser.START_DOCUMENT: /*文档开始事件*/
list = new ArrayList<Student>();
break;
case XmlPullParser.START_TAG:
/*标签开始事件*/
if("Student".equals(pullParser.getName()))
{
stu = new Student();
stu.setId(pullParser.getAttributeValue(null, "id"));
}
else if("name".equals(pullParser.getName()))
{
if(stu == null)
{
break;
}
stu.setName(pullParser.nextText());
}
else if("age".equals(pullParser.getName()))
{
if(stu == null)
{
break;
}
stu.setAge(Integer.parseInt(pullParser.nextText()));
}
break;
case XmlPullParser.END_TAG:
/*标签结束事件*/
if("Student".equals(pullParser.getName()))
{
list.add(stu);
}
break;
default:
break;
}
type = pullParser.next(); /*迭代获取事件*/
}
return list;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
3. Pull方式写XML
public static void WriteStudentXml(List<Student> list, OutputStream output)
{
try
{
XmlSerializer xmlSeri = Xml.newSerializer();
/*创建XmlSerilizer*/
xmlSeri.setOutput(output, "UTF-8");
xmlSeri.startDocument("UTF-8", null);
/*开始文档*/
xmlSeri.startTag(null, "Students"); /*开始标签*/
for(Student stu : list)
{
xmlSeri.startTag(null, "Student");
xmlSeri.attribute(null, "id", stu.getId()); /*写属性*/
xmlSeri.startTag(null, "name");
xmlSeri.text(stu.getName());
xmlSeri.endTag(null, "name");
xmlSeri.startTag(null, "age");
xmlSeri.text(((Integer)stu.getAge()).toString());
xmlSeri.endTag(null, "age");
xmlSeri.endTag(null, "Student");
}
xmlSeri.endTag(null, "Students"); /*结束标签*/
xmlSeri.endDocument();
/*结束文档*/
output.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public class DomStudentService
{
public static List<Student> readStudentXML(InputStream input)
{
try
{
List<Student> list = new ArrayList<Student>();
Student stu = null;
DocumentBuilderFactory domBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder = domBuilderFactory.newDocumentBuilder();
Document dom = domBuilder.parse(input);
Element root = dom.getDocumentElement();
NodeList stuList = root.getElementsByTagName("Student");
for(int i = 0; i < stuList.getLength(); i++)
{
stu = new Student();
Element stuNode = (Element)stuList.item(i); /* Element继承自Node,并不是每个Node都是Element,/n/t也是Node */
/*set id*/
stu.setId(stuNode.getAttribute("id")); /*获取属性值*/
NodeList stuChilds = stuNode.getChildNodes();
for(int j = 0; j < stuChilds.getLength(); j++)
{
if(stuChilds.item(j).getNodeType() != Node.ELEMENT_NODE) /* 判断Node类型是否为Element */
{
continue ;
}
Node childElement = stuChilds.item(j);
/*set name*/
if("name".equals(childElement.getNodeName()))
{
stu.setName(childElement.getFirstChild().getNodeValue());
/*获取标签内的文本*/
}
/*set age*/
else if("age".equals(childElement.getNodeName()))
{
stu.setAge(Integer.parseInt(childElement.getFirstChild().getNodeValue()));
}
}
list.add(stu);
}
return list;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
2.Pull方式解析
pull方式基本与SAX方式一致,事件是由自己触发,性能比较高,与SAX差不多。
public static List<Student> readStudentXml(InputStream input)
{
List<Student> list = null;
Student stu = null;
try
{
XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser pullParser = pullParserFactory.newPullParser();
pullParser.setInput(input, "UTF-8");
int type = pullParser.getEventType(); /*第一次获取事件*/
while(type != XmlPullParser.END_DOCUMENT)
/*遇到文档结束事件,循环终止*/
{
switch(type)
{
case XmlPullParser.START_DOCUMENT: /*文档开始事件*/
list = new ArrayList<Student>();
break;
case XmlPullParser.START_TAG:
/*标签开始事件*/
if("Student".equals(pullParser.getName()))
{
stu = new Student();
stu.setId(pullParser.getAttributeValue(null, "id"));
}
else if("name".equals(pullParser.getName()))
{
if(stu == null)
{
break;
}
stu.setName(pullParser.nextText());
}
else if("age".equals(pullParser.getName()))
{
if(stu == null)
{
break;
}
stu.setAge(Integer.parseInt(pullParser.nextText()));
}
break;
case XmlPullParser.END_TAG:
/*标签结束事件*/
if("Student".equals(pullParser.getName()))
{
list.add(stu);
}
break;
default:
break;
}
type = pullParser.next(); /*迭代获取事件*/
}
return list;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
3. Pull方式写XML
public static void WriteStudentXml(List<Student> list, OutputStream output)
{
try
{
XmlSerializer xmlSeri = Xml.newSerializer();
/*创建XmlSerilizer*/
xmlSeri.setOutput(output, "UTF-8");
xmlSeri.startDocument("UTF-8", null);
/*开始文档*/
xmlSeri.startTag(null, "Students"); /*开始标签*/
for(Student stu : list)
{
xmlSeri.startTag(null, "Student");
xmlSeri.attribute(null, "id", stu.getId()); /*写属性*/
xmlSeri.startTag(null, "name");
xmlSeri.text(stu.getName());
xmlSeri.endTag(null, "name");
xmlSeri.startTag(null, "age");
xmlSeri.text(((Integer)stu.getAge()).toString());
xmlSeri.endTag(null, "age");
xmlSeri.endTag(null, "Student");
}
xmlSeri.endTag(null, "Students"); /*结束标签*/
xmlSeri.endDocument();
/*结束文档*/
output.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
相关文章推荐
- 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull)
- Android之解析XML文件三种方式(DOM,PULL,SAX)
- 【Android高级】XMl文件的DOM、SAX、PULL三种解析方式全解
- xml文件的三种解析方式 DOM SAM PULL
- 详解Android之解析XML文件三种方式(DOM,PULL,SAX)
- Android 解析XML文件的三种方式 DOM,SAX,PULL
- Android 解析XML文件的三种方式 DOM,SAX,PULL
- 利用Dom,Sax,Pull三种方式解析xml文件
- android-----三种方式(sax、pull、dom)解析xml文件
- Android中使用PULL方式解析XML文件
- Android中xml解析的三种方式Pull、Sax、Dom
- android解析XML总结-SAX、Pull、Dom三种方式
- android 使用pull方式解析xml文件
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android pull方式解析XML文件
- (五十七)android解析XML总结(SAX、Pull、Dom三种方式)
- android解析xml文件的方式(其一)DOM
- XML学习之Dom方式解析XML文件
- Android之解析XML总结(SAX、Pull、Dom三种方式)
- 安卓解析XML文件系列3:使用DOM方式