免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1951 | 回复: 0
打印 上一主题 下一主题

Android采用PULL解析XML文档 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-08 13:34 |只看该作者 |倒序浏览
Android系统中采用PULL技术解析XML文档比用SAX技术性能要好得多。建议Android的开发者采用PULL技术解析XML文档。跟SAX类似,只不过PULL技术返回的事件类型是整型,所以我们只要对返回的事件进行处理就行了。1.package com.cn.service;
  1. 5.import java.io.IOException;   

  2. 6.

  3. 7.import java.io.InputStream;   

  4. 8.

  5. 9.import java.io.OutputStream;   

  6. 10.

  7. 11.import java.util.ArrayList;   

  8. 12.

  9. 13.import java.util.List;   

  10. 14.

  11. 15.  

  12. 16.

  13. 17.import org.xmlpull.v1.XmlPullParser;   

  14. 18.

  15. 19.import org.xmlpull.v1.XmlSerializer;   

  16. 20.

  17. 21.  

  18. 22.

  19. 23.import android.util.Xml;   

  20. 24.

  21. 25.  

  22. 26.

  23. 27.import com.cn.domain.Persion;   

  24. 28.

  25. 29./****  

  26. 30.

  27. 31.* 采用Pull解析XML  

  28. 32.

  29. 33.*   

  30. 34.

  31. 35.* ****/  

  32. 36.

  33. 37.public class PULLPersionService {   

  34. 38.

  35. 39.  

  36. 40.

  37. 41.    public static List<Persion> getPersino(InputStream is)throws Exception{   

  38. 42.

  39. 43.        List<Persion> list = null;   

  40. 44.

  41. 45.        Persion persion = null;   

  42. 46.

  43. 47.        XmlPullParser parser = Xml.newPullParser();   

  44. 48.

  45. 49.        parser.setInput(is, "UTF-8");   

  46. 50.

  47. 51.        int event = parser.getEventType();   

  48. 52.

  49. 53.        while(event != XmlPullParser.END_DOCUMENT){   

  50. 54.

  51. 55.            switch (event){   

  52. 56.

  53. 57.            case XmlPullParser.START_DOCUMENT:   

  54. 58.

  55. 59.                list =  new ArrayList<Persion>();   

  56. 60.

  57. 61.                break;   

  58. 62.

  59. 63.            case XmlPullParser.START_TAG:   

  60. 64.

  61. 65.                if("person".equals(parser.getName())){//得到指针所指向的节点名称   

  62. 66.

  63. 67.                    int id = Integer.parseInt(parser.getAttributeValue(0));   

  64. 68.

  65. 69.                    persion = new Persion();   

  66. 70.

  67. 71.                    persion.setId(id);   

  68. 72.

  69. 73.                }   

  70. 74.

  71. 75.                if(persion != null){   

  72. 76.

  73. 77.                    if("name".equals(parser.getName())){   

  74. 78.

  75. 79.                        String name = parser.nextText();   

  76. 80.

  77. 81.                        persion.setName(name);   

  78. 82.

  79. 83.                    }else if("age".equals(parser.getName())){   

  80. 84.

  81. 85.                        String age = parser.nextText();   

  82. 86.

  83. 87.                        persion.setName(age);   

  84. 88.

  85. 89.                    }   

  86. 90.

  87. 91.                }   

  88. 92.

  89. 93.                break;   

  90. 94.

  91. 95.            case XmlPullParser.END_TAG:   

  92. 96.

  93. 97.                if("person".equals(parser.getName())){   

  94. 98.

  95. 99.                    list.add(persion);   

  96. 100.

  97. 101.                    persion = null;   

  98. 102.

  99. 103.                }   

  100. 104.

  101. 105.                break;   

  102. 106.

  103. 107.            default:   

  104. 108.

  105. 109.                break;   

  106. 110.

  107. 111.            }   

  108. 112.

  109. 113.        }   

  110. 114.

  111. 115.        event = parser.next();   

  112. 116.

  113. 117.        return list;   

  114. 118.

  115. 119.    }   

  116. 120.

  117. 121.      

  118. 122.

  119. 123.    public static void save(List<Persion> list,OutputStream os) throws IllegalArgumentException, IllegalStateException, IOException{   

  120. 124.

  121. 125.        XmlSerializer serializer = Xml.newSerializer();   

  122. 126.

  123. 127.        serializer.setOutput(os, "UTF-8");   

  124. 128.

  125. 129.        serializer.startDocument("UTF-8", true);   

  126. 130.

  127. 131.        serializer.startTag(null, "persons");   

  128. 132.

  129. 133.        for(Persion persion : list){   

  130. 134.

  131. 135.            serializer.startTag(null, "person");   

  132. 136.

  133. 137.            serializer.attribute(null, "id", String.valueOf(persion.getId()));   

  134. 138.

  135. 139.                serializer.startTag(null, "name");   

  136. 140.

  137. 141.                serializer.text(persion.getName());   

  138. 142.

  139. 143.                serializer.endTag(null, "name");   

  140. 144.

  141. 145.                  

  142. 146.

  143. 147.                serializer.startTag(null, "age");   

  144. 148.

  145. 149.                serializer.text(String.valueOf(persion.getAge()));   

  146. 150.

  147. 151.                serializer.endTag(null, "age");   

  148. 152.

  149. 153.            serializer.endTag(null, "person");   

  150. 154.

  151. 155.        }   

  152. 156.

  153. 157.        serializer.endTag(null, "persons");   

  154. 158.

  155. 159.        serializer.endDocument();   

  156. 160.

  157. 161.        os.flush();   

  158. 162.

  159. 163.        os.close();   

  160. 164.

  161. 165.    }   

  162. 166.

  163. 167.}  

  164. 168.复制打印

  165. 169.package com.cn.service;  

  166. 170.  

  167. 171.import java.io.IOException;  

  168. 172.import java.io.InputStream;  

  169. 173.import java.io.OutputStream;  

  170. 174.import java.util.ArrayList;  

  171. 175.import java.util.List;  

  172. 176.  

  173. 177.import org.xmlpull.v1.XmlPullParser;  

  174. 178.import org.xmlpull.v1.XmlSerializer;  

  175. 179.  

  176. 180.import android.util.Xml;  

  177. 181.  

  178. 182.import com.cn.domain.Persion;  

  179. 183./****

  180. 184.* 采用Pull解析XML

  181. 185.*  

  182. 186.* ****/  

  183. 187.public class PULLPersionService {  

  184. 188.  

  185. 189.    public static List<Persion> getPersino(InputStream is)throws Exception{  

  186. 190.        List<Persion> list = null;  

  187. 191.        Persion persion = null;  

  188. 192.        XmlPullParser parser = Xml.newPullParser();  

  189. 193.        parser.setInput(is, "UTF-8");  

  190. 194.        int event = parser.getEventType();  

  191. 195.        while(event != XmlPullParser.END_DOCUMENT){  

  192. 196.            switch (event){  

  193. 197.            case XmlPullParser.START_DOCUMENT:  

  194. 198.                list =  new ArrayList<Persion>();  

  195. 199.                break;  

  196. 200.            case XmlPullParser.START_TAG:  

  197. 201.                if("person".equals(parser.getName())){//得到指针所指向的节点名称  

  198. 202.                    int id = Integer.parseInt(parser.getAttributeValue(0));  

  199. 203.                    persion = new Persion();  

  200. 204.                    persion.setId(id);  

  201. 205.                }  

  202. 206.                if(persion != null){  

  203. 207.                    if("name".equals(parser.getName())){  

  204. 208.                        String name = parser.nextText();  

  205. 209.                        persion.setName(name);  

  206. 210.                    }else if("age".equals(parser.getName())){  

  207. 211.                        String age = parser.nextText();  

  208. 212.                        persion.setName(age);  

  209. 213.                    }  

  210. 214.                }  

  211. 215.                break;  

  212. 216.            case XmlPullParser.END_TAG:  

  213. 217.                if("person".equals(parser.getName())){  

  214. 218.                    list.add(persion);  

  215. 219.                    persion = null;  

  216. 220.                }  

  217. 221.                break;  

  218. 222.            default:  

  219. 223.                break;  

  220. 224.            }  

  221. 225.        }  

  222. 226.        event = parser.next();  

  223. 227.        return list;  

  224. 228.    }  

  225. 229.      

  226. 230.    public static void save(List<Persion> list,OutputStream os) throws IllegalArgumentException, IllegalStateException, IOException{  

  227. 231.        XmlSerializer serializer = Xml.newSerializer();  

  228. 232.        serializer.setOutput(os, "UTF-8");  

  229. 233.        serializer.startDocument("UTF-8", true);  

  230. 234.        serializer.startTag(null, "persons");  

  231. 235.        for(Persion persion : list){  

  232. 236.            serializer.startTag(null, "person");  

  233. 237.            serializer.attribute(null, "id", String.valueOf(persion.getId()));  

  234. 238.                serializer.startTag(null, "name");  

  235. 239.                serializer.text(persion.getName());  

  236. 240.                serializer.endTag(null, "name");  

  237. 241.                  

  238. 242.                serializer.startTag(null, "age");  

  239. 243.                serializer.text(String.valueOf(persion.getAge()));  

  240. 244.                serializer.endTag(null, "age");  

  241. 245.            serializer.endTag(null, "person");  

  242. 246.        }  

  243. 247.        serializer.endTag(null, "persons");  

  244. 248.        serializer.endDocument();  

  245. 249.        os.flush();  

  246. 250.        os.close();  

  247. 251.    }  

  248. 252.}  
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP