1. 使用序列化器生成一个xml文件
  2.  
  3. //1,初始化一个xml文件的序列化器
  4. XmlSerializer serializer = Xml.newSerializer();
  5. //2.初始化序列器参数
  6. File file = new File(Environment.getExternalStorageDirectory(),"backup.xml");
  7. FileOutputStream fos = new FileOutputStream(file);
  8. serializer.setOutput(fos, "UTF-8");
  9. //3.开始写xml文件.
  10. serializer.startDocument("UTF-8", true);
  11. serializer.startTag(null, "smss");
  12. for(SmsInfo info : smsInfos){
  13. //开始写sms节点
  14. serializer.startTag(null, "sms");
  15. //开始写body节点
  16. serializer.startTag(null, "body");
  17. serializer.text(info.getBody());
  18. //body节点结束
  19. serializer.endTag(null, "body");
  20.  
  21. //开始写address节点
  22. serializer.startTag(null, "address");
  23. serializer.text(info.getAddress());
  24. serializer.endTag(null, "address");
  25.  
  26. //开始写data节点
  27. serializer.startTag(null, "date");
  28. serializer.text(info.getDate()+"");
  29. serializer.endTag(null, "date");
  30. // sms节点结束
  31. serializer.endTag(null, "sms");
  32. }
  33. //smss根节点结束
  34. serializer.endTag(null, "smss");
  35. //xml 结束
  36. serializer.endDocument();
  37. fos.close();
  38.  
  39. Toast.makeText(this, "备份短信成功", 0).show();
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. Toast.makeText(this, "备份短信失败", 0).show();
  43. }
  44.  
  45. #12.使用pull解析xml格式的数据 (重要)
  46.  
  47. public class MainActivity extends Activity {
  48. @Override
  49. protected void onCreate(Bundle savedInstanceState) {
  50. super.onCreate(savedInstanceState);
  51. // 设置activity显示的布局
  52. setContentView(R.layout.activity_main);
  53. TextView tv_info = (TextView) findViewById(R.id.tv_info);
  54. StringBuilder sb = new StringBuilder();
  55. try {
  56. //获取我们解析出来的天气信息
  57. List<Channel> channels = WeatherService.getAllWeatherInfos(getClass().getClassLoader().getResourceAsStream("weather.xml"));
  58. for(Channel channel : channels){
  59. sb.append(channel.toString());
  60. sb.append("\n");
  61. }
  62. //把解析出来的天气信息设置到textview上
  63. tv_info.setText(sb.toString());
  64.  
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. Toast.makeText(this, "解析天气信息失败", 0).show();
  68. }
  69.  
  70. }
  71.  
  72. }
  73.  
  74. ---------------------------------------------------------------
  75.  
  76. public class WeatherService {
  77. /**
  78. * 解析服务器返回的数据 获取天气信息
  79. * @param is 服务器返回的包含天气信息的流 (xml)
  80. * @return
  81. */
  82. public static List<Channel> getAllWeatherInfos(InputStream is) throws Exception{
  83. List<Channel> channels = null;
  84. Channel channel = null;
  85. //1.获取xml解析器
  86. XmlPullParser parser = Xml.newPullParser();
  87. //2.设置xml解析器的参数
  88. parser.setInput(is, "utf-8");
  89. //3.开始解析xml文件.
  90.  
  91. int type = parser.getEventType();// 获取当前的事件的类型
  92. while (type!=XmlPullParser.END_DOCUMENT){ //需要让pull解析器解析到文件的末尾
  93. switch (type) {
  94. case XmlPullParser.START_TAG:
  95. if("weather".equals(parser.getName())){//总的开始节点
  96. channels = new ArrayList<Channel>(); //初始化集合
  97. }else if("channel".equals(parser.getName())){//某个城市的信息开始了.
  98. channel = new Channel();
  99. //获取到id的属性值
  100. String id = parser.getAttributeValue(0);
  101. channel.setId(Integer.parseInt(id));
  102. //解析city节点
  103. }else if("city".equals(parser.getName())){
  104. String city = parser.nextText();
  105. channel.setCity(city);
  106. //解析温度节点
  107. }else if("temp".equals(parser.getName())){
  108. String temp = parser.nextText();
  109. channel.setTemp(temp);
  110. //解析风力节点
  111. }else if("wind".equals(parser.getName())){
  112. String wind = parser.nextText();
  113. channel.setWind(wind);
  114. //解析pm250节点
  115. }else if("pm250".equals(parser.getName())){
  116. String pm250 = parser.nextText();
  117. channel.setPm250(Integer.parseInt(pm250));
  118. }
  119. break;
  120. //判断xml的结束节点
  121. case XmlPullParser.END_TAG:
  122. if("channel".equals(parser.getName())){
  123. //把解析的内容加入到集合中
  124. channels.add(channel);
  125. channel = null;
  126. }
  127. break;
  128. }
  129.  
  130. type = parser.next();
  131. }
  132.  
  133. is.close();
  134. return channels;//把所有的频道的集合返回回去
  135. }
  136. }

xml的生成与解析_老师笔记的更多相关文章

  1. 在Salesforce中处理Xml的生成与解析

    在Salesforce中处理Xml的生成与解析 1): Generate Xml private String ConvertAccountToXmlInfo(Account acc){ Dom.Do ...

  2. android xml的生成与解析

    Main java package com.itheima.xml; import android.app.Activity; import android.content.Context; impo ...

  3. Android(java)学习笔记185:xml文件生成

    1.xml文件: 用元素描述数据,跨平台. 2.利用传统的方式创建xml文件,下面是一个案例: 设计思路:建立一个学生管理系统,创建xml文件保存学生信息: (1)首先是布局文件activity_ma ...

  4. dom4j生成和解析xml文件

    dom4j生成和解析xml文件 要生成和解析如下格式的xml文件: <?xml version="1.0" encoding="UTF-8"?> & ...

  5. DOM4J生成、解析XML实例

    import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterato ...

  6. JDOM生成、解析XML实例

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  7. Java解析XML与生成XML文件

    XML是eXtensible Markup Language(可扩展标记语言)的简写形式,它是一种元标记语言(meta-markup language),也就是说它没有一套能够适用于各个领域中所有用户 ...

  8. Android中XML文件的序列化生成与解析

    xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...

  9. Android学习记录(1)—Android中XML文件的序列化生成与解析

    xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较 ...

随机推荐

  1. TFS 图标意思

    小人:文件被其他人签出 对号:文件被自己签出 锁: 文件已经被签入 加号:新增加一个文件

  2. Swift学习笔记五

    基础运算符 Swift的大部分运算符和C及OC相同,也分一元二元多元的,这里只记录一些Swift特有的性质或写法. 赋值运算符( = ) 在等号右边是一个有多个值的元组时,它的成员值可以分解并同时分别 ...

  3. Codeforces Gym 100513I I. Sale in GameStore 暴力

    I. Sale in GameStore Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/p ...

  4. c#代码实现GPS数据的有效性校验

    用于校验GPS报文指令的有效性 很简单的代码,留存吧 public static bool Verify(string gpsInfo)         {            if (gpsInf ...

  5. fl,flash,mx包的区别

    在ActionScript项目中还真是不能使用mx包中的UI组件.           Adobe官方论坛上有一个帖子讲述了这个问题,大致意思是说:你要使用mx包中像Button这样的UI组件都是从U ...

  6. C++编译器默默编写并调用哪些函数

    什么时候empty class(空类)不再是个empty class呢?当C++处理过它之后,是的,如果你自己没有声明,编译器就会为它声明(编译器版本)一个copy构造函数.一个copy assign ...

  7. 命令行中使用adb安装apk

    转载:http://blog.sina.com.cn/s/blog_8324d8e80101b8dn.html 在你的android—IDE中找到D:\Softwave_Ghost\技术软件\IDE\ ...

  8. windows系统-web渗透工具-AWVS

    windows系统-web渗透工具-AWVS ACUNETIX WEB VULNERABILITY SCANNER(AWVS) Awvs是一款很出名的web安全扫描器,属于windows系统平台下最流 ...

  9. C中的回调函数

    C语言中应用回调函数的地方非常多,如Nginx中: struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_c ...

  10. Url几个常用的函数

    parse_url() 本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分. 本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分.不完整的 URL ...