04 pull生成XML

前端之家收集整理的这篇文章主要介绍了04 pull生成XML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. package com.example.lession04_pull.service;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. import org.xmlpull.v1.XmlPullParser;
  10. import org.xmlpull.v1.XmlSerializer;
  11. import android.os.Environment;
  12. import android.util.Xml;
  13.  
  14. import com.example.lession04_pull.domain.Person;
  15.  
  16. public class PullXmlService {
  17. public Person currentPerson;
  18.  
  19. public List<Person> readXml(InputStream is){
  20. //声明返回值
  21. List<Person> persons=null;
  22. //首先利用Xml.newPullParser()获取解析对象
  23. XmlPullParser xmlPullParser=Xml.newPullParser();
  24. try{
  25. // 解析文件
  26. xmlPullParser.setInput(is,"UTF-8");
  27. //获取解析的事件类型
  28. int eventType=xmlPullParser.getEventType();
  29. //判断文件解析的是否完毕
  30. while(eventType!=XmlPullParser.END_DOCUMENT){
  31. switch (eventType) {
  32. case XmlPullParser.START_DOCUMENT:
  33. persons=new ArrayList<Person>();
  34. break;
  35.  
  36. case XmlPullParser.START_TAG:
  37. String tagName=xmlPullParser.getName();
  38. if("person".equals(tagName)){
  39. //创建person对象
  40. currentPerson=new Person();
  41. currentPerson.setId(Integer.parseInt(xmlPullParser
  42. .getAttributeValue(null,"id")));
  43. }else if("name".equals(tagName)){
  44. currentPerson.setName(xmlPullParser.nextText());
  45. }else if("age".equals(tagName)){
  46. currentPerson.setAge(new Short(xmlPullParser.nextText()));
  47. }
  48. break;
  49. case XmlPullParser.END_TAG:
  50. if("person".equals(xmlPullParser.getName()) && currentPerson!=null){
  51. //把person对象放到集合中去
  52. persons.add(currentPerson);
  53. currentPerson=null;
  54. }
  55. break;
  56. }
  57. eventType=xmlPullParser.next();
  58. }
  59. is.close();
  60. }catch(Exception e){
  61. e.printStackTrace();
  62. }
  63. return persons;
  64. }
  65. // 写入
  66. public boolean write(List<Person> persons) {
  67. // 采用pull解析进行实现
  68.  
  69. if (Environment.getExternalStorageState().equals(
  70. Environment.MEDIA_MOUNTED)) {
  71.  
  72. // 获取sdcard目录 文件对象
  73. File sdCardDir = Environment.getExternalStorageDirectory();
  74. // 创建文件
  75. File file = new File(sdCardDir,"mycsdn.xml");
  76.  
  77. XmlSerializer serializer = Xml.newSerializer();
  78.  
  79. FileOutputStream fos = null;
  80. try {
  81. // 根据文件对象创建一个文件输出流对象
  82. fos = new FileOutputStream(file);
  83. // 设置输出的流及编码
  84. serializer.setOutput(fos,"UTF-8");
  85. // 设置文件的开始
  86. serializer.startDocument("UTF-8",true);
  87. // persons标签开始
  88. serializer.startTag(null,"persons");
  89. for (Person person : persons) {
  90. // person标签的开始
  91. serializer.startTag(null,"person");
  92. // 设置person标签属性
  93. serializer.attribute("null","id",person.getId() + "");
  94.  
  95. // 设置person标签的子标签 name
  96. serializer.startTag(null,"name");
  97. serializer.text(person.getName());
  98. serializer.endTag(null,"name");
  99.  
  100. // 设置person标签的子标签的age
  101. serializer.startTag(null,"age");
  102. serializer.text(person.getAge() + "");
  103. serializer.endTag(null,"age");
  104.  
  105. // person标签的结束
  106. serializer.endTag(null,"person");
  107. }
  108.  
  109. // persons标签的结束
  110. serializer.endTag(null,"persons");
  111. // 文件的结束
  112. serializer.endDocument();
  113.  
  114. fos.flush();
  115. fos.close();
  116. return true;
  117. } catch (Exception e) {
  118. e.printStackTrace();
  119. }
  120.  
  121. }
  122.  
  123. return false;
  124. }
  125.  
  126. }

猜你在找的XML相关文章