xml的生成与解析_老师笔记

使用序列化器生成一个xml文件

    //1,初始化一个xml文件的序列化器
            XmlSerializer serializer = Xml.newSerializer();
            //2.初始化序列器参数
            File file = new File(Environment.getExternalStorageDirectory(),"backup.xml");
            FileOutputStream fos = new FileOutputStream(file);
            serializer.setOutput(fos, "UTF-8");
            //3.开始写xml文件.
            serializer.startDocument("UTF-8", true);
            serializer.startTag(null, "smss");
            for(SmsInfo info : smsInfos){
               //开始写sms节点
                serializer.startTag(null, "sms");
                //开始写body节点
                serializer.startTag(null, "body");
                serializer.text(info.getBody());
                //body节点结束
                serializer.endTag(null, "body"); 

                //开始写address节点
                serializer.startTag(null, "address");
                serializer.text(info.getAddress());
                serializer.endTag(null, "address");

                //开始写data节点
                serializer.startTag(null, "date");
                serializer.text(info.getDate()+"");
                serializer.endTag(null, "date");
                // sms节点结束
                serializer.endTag(null, "sms");
            }
            //smss根节点结束
            serializer.endTag(null, "smss");
            //xml 结束
            serializer.endDocument();
            fos.close();

            Toast.makeText(this, "备份短信成功", 0).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "备份短信失败", 0).show();
        }

#12.使用pull解析xml格式的数据 (重要)

    public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // 设置activity显示的布局
        setContentView(R.layout.activity_main);
        TextView tv_info = (TextView) findViewById(R.id.tv_info);
        StringBuilder sb = new StringBuilder();
        try {
            //获取我们解析出来的天气信息
            List<Channel> channels = WeatherService.getAllWeatherInfos(getClass().getClassLoader().getResourceAsStream("weather.xml"));
            for(Channel channel : channels){
                sb.append(channel.toString());
                sb.append("\n");
            }
            //把解析出来的天气信息设置到textview上
            tv_info.setText(sb.toString());

        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "解析天气信息失败", 0).show();
        }

    }

    }

---------------------------------------------------------------

      public class WeatherService {
    /**
     * 解析服务器返回的数据 获取天气信息
     * @param is 服务器返回的包含天气信息的流 (xml)
     * @return
     */
    public static List<Channel> getAllWeatherInfos(InputStream is) throws Exception{
        List<Channel> channels = null;
        Channel channel = null;
        //1.获取xml解析器
        XmlPullParser parser = Xml.newPullParser();
        //2.设置xml解析器的参数
        parser.setInput(is, "utf-8");
        //3.开始解析xml文件.

        int type = parser.getEventType();// 获取当前的事件的类型
        while (type!=XmlPullParser.END_DOCUMENT){ //需要让pull解析器解析到文件的末尾
            switch (type) {
            case XmlPullParser.START_TAG:
                if("weather".equals(parser.getName())){//总的开始节点
                    channels = new ArrayList<Channel>(); //初始化集合
                }else if("channel".equals(parser.getName())){//某个城市的信息开始了.
                    channel = new Channel();
                    //获取到id的属性值
                    String id = parser.getAttributeValue(0);
                    channel.setId(Integer.parseInt(id));
                    //解析city节点
                }else if("city".equals(parser.getName())){
                    String city = parser.nextText();
                    channel.setCity(city);
                    //解析温度节点
                }else if("temp".equals(parser.getName())){
                    String temp = parser.nextText();
                    channel.setTemp(temp);
                    //解析风力节点
                }else if("wind".equals(parser.getName())){
                    String wind = parser.nextText();
                    channel.setWind(wind);
                     //解析pm250节点
                }else if("pm250".equals(parser.getName())){
                    String pm250 = parser.nextText();
                    channel.setPm250(Integer.parseInt(pm250));
                }
                break;
            //判断xml的结束节点
            case XmlPullParser.END_TAG:
                if("channel".equals(parser.getName())){
                    //把解析的内容加入到集合中
                    channels.add(channel);
                    channel = null;
                }
                break;
            }

            type = parser.next();
        }

        is.close();
        return channels;//把所有的频道的集合返回回去
     }
    }
时间: 2024-10-17 16:01:57

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

dom4j xml的生成与解析

这两天在一直写数据接口,涉及到数据xml文件的生成与解析,在此,简单地记录和总结一下. 其实,生成与解析xml文件主要还是运用java中的I/O文件的知识点. 现在大多数的人写xml文件的生成和解析都使用dom4j,它确实比传统的w3c的写法要简单方便的多.就像jQuery相比于js的优点显而易见一般. dom4j 简介: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常优秀的Java XML API,同时它也是一个开放源代码的软件,可以在So

android xml的生成与解析

Main java package com.itheima.xml; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; i

grep -w 的解析_学习笔记

grep -w 用来指定我们要匹配的词组,这里就是在pattern的写法上要注意下 ,正常词组是字母,数字和下划线来组成词, 但是我们查找的时候呢,如果想要找x+y=z 这个表达式,其实也可以当做一个词组 这个时候一定要加引号就行了 还有一个就是在用\<pattern\>来定位一个词的词首和词尾时,要注意的是pattern的写法,就是pattern行的开始和结束不能使用非词组字符,就是不能使用除字母数字和下划线开始的一些字符,比如:?之类的 echo "/abc" | gr

Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim

Identity学习笔记 Asp.Net Identity学习笔记+MVC5默认项目解析_基础用法 Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim Identity学习笔记授权以角色授权IdentityRoleRoleManager基于声明的(Claims)IPrincipalIIdentityCalimsIdentityClaim用户登入用户授权其他细节Claim Type命名空间 授权 最常用的授权就是给Controller或Action打上[Authori

Asp.Net Identity学习笔记+MVC5默认项目解析_第三方登入&授权总结

Identity学习笔记 Asp.Net Identity学习笔记+MVC5默认项目解析_基础用法 Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim Asp.Net Identity学习笔记+MVC5默认项目解析_第三方登入&授权总结 Identity学习笔记第三方登入配置登入案例登入技术总结本地,已登入本地,未登入第三方登入 第三方登入 本文介绍Identity的第三方登入技术.到目前为止只介绍了CookieAuthentication这种授权方式,即浏览

Java解析XML与生成XML文件

XML是eXtensible Markup Language(可扩展标记语言)的简写形式,它是一种元标记语言(meta-markup language),也就是说它没有一套能够适用于各个领域中所有用户的固守的标签和元素,相反,它允许开发者根据自已的需要定义自已的元素,XML中的X(eXtensible)就是说明了这一点. 它的特点有: 1.XML使用Unicode字符集,可生成英文.中文.希腊文或梵文等多种语言. 2.可将多个来源(包括其他XML文档和二进制文件)汇合进一个XML文档. 3.可利

JDOM生成、解析XML实例

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import org.jdom.Attribute; import org.jdom.Comment; import org.jdom.Document; import org.jdom.Element; impo

四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例) 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.

基于oracle SQL Developer Data Modeler建模工具,解析xml,生成etljet代码

今天准备在 @zhangkai05 写的小工具model_sql基础上,进一步完善功能,使其更加自动化.方便建模人员开发etl任务. 源代码更改后 ,会发布到 git(url地址)上,逐步完善. 描述现状及问题 团队 数据仓库建模在2013年下开始使用 oracle sql developser datamodeler建模工具,之前一直用 powerdesigner,但由于后者是商业收费软件,公司又不打算购买.故经过调研,转向oracle建模工具.虽然其 易用性与 power designer