Android 开发工具类 13_ SaxService
生活随笔
收集整理的這篇文章主要介紹了
Android 开发工具类 13_ SaxService
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網絡 xml 解析方式 1 package com.example.dashu_saxxml;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.util.HashMap;
6 import java.util.List;
7
8 import javax.xml.parsers.SAXParser;
9 import javax.xml.parsers.SAXParserFactory;
10
11 import org.xml.sax.InputSource;
12 import org.xml.sax.SAXParseException;
13
14 public class SaxService {
15 public SaxService() {
16 }
17
18 /**
19 * 網絡xml解析方式
20 * */
21 public static List<HashMap<String, String>> readXML(
22 InputStream inputStream, String nodeName) {
23 List<HashMap<String, String>>list=null;
24 try {
25 //創建一個解析xml工廠對象
26 SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
27 SAXParser parser=saxParserFactory.newSAXParser();//解析xml
28 MyHandler myHandler=new MyHandler(nodeName);
29 parser.parse(inputStream, myHandler);
30 list=myHandler.getList();
31 inputStream.close();//關閉io
32 } catch (Exception e) {
33 // TODO: handle exception
34 }
35 return list;
36 }
37 }
MyHandler 繼承 DefaultHandler 解析工具類
1 package com.example.dashu_saxxml; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 7 import org.xml.sax.Attributes; 8 import org.xml.sax.SAXException; 9 import org.xml.sax.helpers.DefaultHandler; 10 11 import android.R.integer; 12 13 public class MyHandler extends DefaultHandler { 14 private HashMap<String, String> map = null;// 存儲單個解析的完整對象 15 List<HashMap<String, String>> list = null;// 存儲所以的解析對象 16 private String currentTag = null;// 正在解析元素的標簽 17 private String currentValue = null;// 正在解析元素的值 18 private String nodeName = null;// 當前解析節點名稱 19 20 public MyHandler(String nodeName) { 21 super(); 22 this.nodeName = nodeName; 23 } 24 25 public List<HashMap<String, String>> getList() { 26 return list; 27 } 28 29 /** 30 * xml文件開始解析時候調用的方法 31 * */ 32 @Override 33 public void startDocument() throws SAXException { 34 // TODO Auto-generated method stub 35 list = new ArrayList<HashMap<String, String>>(); 36 super.startDocument(); 37 } 38 39 /** 40 * 解析到節點開頭調用方法<name> 41 * */ 42 @Override 43 public void startElement(String uri, String localName, String qName, 44 Attributes attributes) throws SAXException { 45 // TODO Auto-generated method stub 46 if (qName.equals(nodeName)) { 47 map = new HashMap<String, String>(); 48 } 49 if (attributes != null && map != null) { 50 for (int i = 0; i < attributes.getLength(); i++) { 51 map.put(attributes.getQName(i), attributes.getValue(i)); 52 } 53 } 54 currentTag = qName; 55 } 56 57 /** 58 * 解析到節點開頭結尾中間夾的文字所調用的方法 59 * */ 60 @Override 61 public void characters(char[] ch, int start, int length) 62 throws SAXException { 63 // TODO Auto-generated method stub 64 if (currentTag != null && map != null) { 65 currentValue = new String(ch, start, length); 66 if (currentValue != null && !currentValue.trim().equals("") 67 && !currentValue.trim().equals("\n")) { 68 map.put(currentTag, currentValue); 69 } 70 } 71 currentTag = null;// 把當前節點對應的值和標簽設置為空 72 currentValue = null; 73 } 74 75 /** 76 * 解析到節點結尾調用方法</name> 77 * */ 78 @Override 79 public void endElement(String uri, String localName, String qName) 80 throws SAXException { 81 // 遇到結束標記時候 82 if (qName.equals(nodeName)) { 83 list.add(map); 84 map = null; 85 } 86 } 87 }dashu.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <user-list> 3 <user id="1"> 4 <name>大樹</name> 5 <age>22</age> 6 </user> 7 8 <user id="2"> 9 <name>梅子</name> 10 <age>28</age> 11 </user> 12 13 <user id="3"> 14 <name>爸爸</name> 15 <age>48</age> 16 </user> 17 18 <user id="4"> 19 <name>媽媽</name> 20 <age>48</age> 21 </user> 22 </user-list>?【參考文獻】
http://blog.csdn.net/u010794950/article/details/24553733
轉載于:https://www.cnblogs.com/renzimu/p/4535822.html
總結
以上是生活随笔為你收集整理的Android 开发工具类 13_ SaxService的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斐波那契数 c 语言实现
- 下一篇: 项目中的经验及教训