Dom与Pull方式解析XML文件
来源:互联网 发布:e卡销官网源码 编辑:程序博客网 时间:2024/05/16 15:12
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();
}
}
- Dom与Pull方式解析XML文件
- android中解析XML文件方式—DOM SAX PULL
- 利用Dom,Sax,Pull三种方式解析xml文件
- DOM、SAX、PULL方式解析XML
- pull 方式解析xml文件
- Pull方式解析XML文件
- PULL方式解析XML文件
- Android中xml文件解析 SAX方式 与 PULL方式
- Android xml文件解析 SAX,DOM,PULL
- Dom、Sax、Pull解析xml文件
- XML文件解析汇总SAX/DOM/PULL
- 利用PULL解析方式解析XML文件
- 解析XML(三种解析方式DOM,SAX,PULL)
- java与xml学习[DOM方式解析XML文件]
- Android 解析XML文件的三种方式 DOM,SAX,PULL
- 三种方式解析XML(DOM,Pull,Sax,并带文件编码识别).........................by 私念
- Android 解析XML文件的三种方式 DOM,SAX,PULL(转帖)
- Android 解析XML文件的三种方式 DOM,SAX,PULL
- C语言常见面试题
- 纪念一下自己一下午的愚蠢——KMP算法核心
- LESS/Sass/CoffeeScript图形编译工具推荐
- 百度地图开发( 基于新版本V2_1_1)— 覆盖物(3)_路线图层(RouteOverlay)
- GitHub+TortoiseGit
- Dom与Pull方式解析XML文件
- jsp显示中文文件名的图片 详细出处参考:http://www.jb51.net/article/37149.htm
- 嵌入式学习笔记之GPIO
- iOS应用内付费(IAP)开发步骤列表
- 数据库只能用机器名连接,不能用ip地址连接
- 学习iPhone开发中 sqlite3的使用
- javascript关联数组
- 遗传算法解决TSP问题
- Bootstrap js插件使用大全