android 67 生成和解析xml

简介:

生成xml:

复制代码
package com.itheima.createxml;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import com.itheima.createxml.domain.Message;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    List<Message> smsList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //虚拟10条短信
        smsList = new ArrayList<Message>();
        for(int i = 0; i < 10; i++){
            Message sms = new Message("小志好棒" + i, System.currentTimeMillis() + "", "138"+i+i, "1");
            smsList.add(sms);
        }
    }

    public void click(View v){
        //在内存中把xml备份短信的格式拼接出来,短信保存在外部,因为应用删除后要短信还在。
        StringBuffer sb = new StringBuffer();
        sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>");
        sb.append("<messages>");
        for (Message sms : smsList) {//拼接每一条短信sms
            sb.append("<sms>");
            
            sb.append("<body>");
            sb.append(sms.getBody());
            sb.append("</body>");
            
            sb.append("<date>");
            sb.append(sms.getDate());
            sb.append("</date>");
            
            sb.append("<type>");
            sb.append(sms.getType());
            sb.append("</type>");
            
            sb.append("<address>");
            sb.append(sms.getAddress());
            sb.append("</address>");
            
            sb.append("</sms>");
        }
        sb.append("</messages>");
        
        File file = new File("sdcard/sms.xml");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(sb.toString().getBytes());
            fos.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
复制代码

生成xml:

复制代码
package com.itheima.xmlserializer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlSerializer;

import com.itheima.createxml.domain.Message;

import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    List<Message> smsList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 虚拟10条短信
        smsList = new ArrayList<Message>();
        for (int i = 0; i < 10; i++) {
            Message sms = new Message("小志好棒" + i, System.currentTimeMillis()
                    + "", "138" + i + i, "1");
            smsList.add(sms);
        }
    }

    public void click(View v){
        //使用xml序列化器生成xml文件
        //1.拿到序列化器对象
        XmlSerializer xs = Xml.newSerializer();
        //2.初始化路径和文件名,生成在sd卡中,
        File file = new File("sdcard/sms2.xml");
        try {
            FileOutputStream fos = new FileOutputStream(file);
            //enconding:指定用什么编码生成xml文件,安卓默认就是utf-8,所以几乎所有的编码都是utf-8,
            xs.setOutput(fos, "utf-8");
            
            //utf-8指定头结点<message>中的enconding的值enconding="utf-8",true指定是否是独立的xml文件,
            xs.startDocument("utf-8", true);
            
            xs.startTag(null, "message");//开始节点的名字<message>,null为namespace,
            
            for (Message sms : smsList) {
                xs.startTag(null, "sms");
                
                xs.startTag(null, "body");
                xs.text(sms.getBody() + "<body>");//text表示文本节点
                xs.endTag(null, "body");
                
                xs.startTag(null, "date");
                xs.text(sms.getDate());
                xs.endTag(null, "date");
                
                xs.startTag(null, "type");
                xs.text(sms.getType());
                xs.endTag(null, "type");
                
                xs.startTag(null, "address");
                xs.text(sms.getAddress());
                xs.endTag(null, "address");
                
                xs.endTag(null, "sms");
            }
            
            xs.endTag(null, "message");//结束节点
            
            //告诉序列化器,文件生成完毕
            xs.endDocument();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }

}
复制代码

解析xml:

复制代码
package com.itheima.pullparser;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.itheima.pullparser.domain.City;

import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    List<City> cityList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View v){
        //获取到src文件夹下的资源文件
        InputStream is = getClassLoader().getResourceAsStream("weather.xml");//获取资源作为流
        
        //拿到pull解析器对象
        XmlPullParser xp = Xml.newPullParser();
        //初始化
        try {
            xp.setInput(is, "gbk");//第一个是输入流,gbk是解析编码,gbk是windows的默认编码格式,所以weather.xml的编码格式是gbk
            
            //获取当前节点的事件类型,通过事件类型的判断,我们可以知道当前节点是什么节点,从而确定我们应该做什么操作
            //解析是一行一行的解析的,
            int type = xp.getEventType();
            City city = null;
            while(type != XmlPullParser.END_DOCUMENT){//文档结束节点
                //根据节点的类型,要做不同的操作
                switch (type) {
                case XmlPullParser.START_TAG://开始节点
                    //                    获取当前节点的名字
                    if("weather".equals(xp.getName())){
                        //创建city集合对象,用于存放city的javabean
                        cityList = new ArrayList<City>();
                    }
                    else if("city".equals(xp.getName())){
                        //创建city的javabean对象
                        city = new City();
                    }
                    else if("name".equals(xp.getName())){
                        String name = xp.nextText();//获取当前节点的下一个节点的文本就是QQ,nextText并把指针移到当前节点的结束节点,
                        city.setName(name);
                    }
                    else if("temp".equals(xp.getName())){
                        //                获取当前节点的下一个节点的文本
                        String temp = xp.nextText();
                        city.setTemp(temp);
                    }
                    else if("pm".equals(xp.getName())){
                        //                获取当前节点的下一个节点的文本
                        String pm = xp.nextText();
                        city.setPm(pm);
                    }
                    break;
                case XmlPullParser.END_TAG://结束节点,<name>QQ</name>遇到</name>什么都不做,遇到QQ文本节点什么都不做,
                    if("city".equals(xp.getName())){
                        //把city的javabean放入集合中
                        cityList.add(city);
                    }
                    break;

                }
                
                //把指针移动到下一个节点,并返回该节点的事件类型,前一个结束节点和后一个开始节点会有一个换行符,换行符是一个文本节点,
                type = xp.next();
            }
            
            for (City c : cityList) {
                System.out.println(c.toString());
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
/*
 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<weather>
    <city>
        <name>QQ</name>
        <temp>5</temp>
        <pm>80</pm>
    </city>
    <city>
        <name>rr</name>
        <temp>-5</temp>
        <pm>800</pm>
    </city>
    <city>
        <name>����</name>
        <temp>12��</temp>
        <pm>60</pm>
    </city>
</weather>*/
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4926331.html,如需转载请自行联系原作者


相关文章
|
5月前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
679 60
|
12月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2831 1
|
5月前
|
XML 数据采集 API
用Lxml高效解析XML格式数据:以天气API为例
免费Python教程:实战解析中国天气网XML数据,详解Lxml库高效解析技巧、XPath用法、流式处理大文件及IP封禁应对策略,助你构建稳定数据采集系统。
326 0
|
10月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
278 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
9月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
395 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
12月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
450 15
|
12月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
324 1
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
1171 8

推荐镜像

更多
  • DNS