标签:
安卓和JAVA解析xml文件的三种方式:
1、PULL解析
2、SAX解析
3、DOM解析
三者各有所长,依情况选择解析方式
1、PULL和SAX均采用流式解析,意味着只能从头读到底,无法像DOM解析一样随机访问xml文件中的任意一个节点
2、PULL和SAX占用更少的内存解析,更适用于安卓上的解析xml文件
3、DOM解析时将文件全部解析完,最后让用户任意取特定的信息
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面学习PULL解析方式。(PULL方法的简洁性是它最大的优势)
1 public class PullParser { 2 3 public List<Worker> pullParsers() throws XmlPullParserException, IOException 4 { 5 List<Worker> list = null; 6 Worker worker = null; 7 //第一步:创建XML解析对象,需要通过工厂模式创建类的实例 8 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 9 XmlPullParser parser = factory.newPullParser(); 10 // 第二步:设置待解析的xml数据源 11 FileInputStream fis = new FileInputStream("worker.xml"); 12 parser.setInput(fis,"utf-8"); 13 // 第三步:获取当前xml标签的事件类型 14 int event = parser.getEventType(); 15 // 第四步:通过分支语句处理不同的事件标签 16 while(event!=XmlPullParser.END_DOCUMENT) 17 { 18 19 switch(event) 20 { 21 // 第五步:获取标签名称,处理标签信息 22 case XmlPullParser.START_DOCUMENT://解析文件开始,创建列表集合对象 23 list = new ArrayList<Worker>(); 24 break; 25 case XmlPullParser.START_TAG: 26 String tagName = parser.getName(); 27 if("worker".equals(tagName)) 28 { 29 worker = new Worker(); 30 int count = parser.getAttributeCount();//得到属性的个数 31 for(int i=0;i<count;i++) 32 { 33 String attrName = parser.getAttributeName(i); 34 String attrValue = parser.getAttributeValue(i); 35 if("id".equals(attrName)) 36 worker.setId(attrValue); 37 } 38 } 39 else if("name".equals(tagName)) 40 worker.setName(parser.nextText()); 41 worker.setMoney(Double.parseDouble(parser.nextText())); 42 break; 43 44 case XmlPullParser.END_TAG://解析文件结束, 45 if("worker".equals(parser.getName())) 46 { 47 // 第六步:将处理的数据保存到JavaBean或Map对象中 48 list.add(worker); 49 worker = null; 50 } 51 break; 52 } 53 // 第七步:获取下一个标签的事件类型,判断事件类型是否为文档结束事件,如果是则退出,反之重复第四、五、六步 54 event = parser.next(); 55 } 56 return list; 57 } 58 59 /** 60 * @param args 61 * @throws IOException 62 * @throws XmlPullParserException 63 */ 64 public static void main(String[] args) throws XmlPullParserException, IOException { 65 PullParser pullParser = new PullParser(); 66 List<Worker> list = pullParser.pullParsers(); 67 68 for(Worker w:list) 69 { 70 System.out.println(w); 71 } 72 } 73 74 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <workers> 3 <worker id="AQ01"> 4 <name>Mark</name> 5 </worker> 6 <worker id="AD02"> 7 <name>Luch</name> 8 </worker> 9 <worker id="AD03"> 10 <name>Lily</name> 11 </worker> 12 <worker id="AD04"> 13 <name>Lily</name> 14 </worker> 15 </workers>
1 package com.qianfeng.pullparser2; 2 3 public class Worker { 4 5 private String id; 6 private String name; 7 8 public Worker() { 9 super(); 10 // TODO Auto-generated constructor stub 11 } 12 public Worker(String id, String name) { 13 super(); 14 this.id = id; 15 this.name = name; 16 17 } 18 public String getId() { 19 return id; 20 } 21 public void setId(String id) { 22 this.id = id; 23 } 24 public String getName() { 25 return name; 26 } 27 public void setName(String name) { 28 this.name = name; 29 } 30 31 @Override 32 public String toString() { 33 return "Worker [id=" + id + ", name=" + name + "]"; 34 } 35 }
解析效果:
1 Worker [id=AQ01, name=Mark] 2 Worker [id=AD02, name=Luch] 3 Worker [id=AD03, name=Lily] 4 Worker [id=AD04, name=Lily]
标签:
原文地址:http://www.cnblogs.com/xqxacm/p/4758702.html