1.生成xml文件的两种方式

(1)采用拼接的方式生成xml(不推荐使用)

(2)利用XmlSerializer类生成xml文件

package com.example.lucky.test52xml;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import android.widget.Button; import org.xmlpull.v1.XmlSerializer; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity {
Button bt1_generateXml;
Button bt2_generateXml;
List<Sms> smsList; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1_generateXml=findViewById(R.id.bt1_generateXml);
bt2_generateXml=findViewById(R.id.bt2_generateXml);
smsList=new ArrayList<>();
for (int i = 0; i <10; i++) {
Sms sms=new Sms();
sms.setAddress("10088"+i);
sms.setBody("nihaolucky"+i);
sms.setDate("201"+i);
smsList.add(sms);
} //方法1采用拼接的方式生成xml(不推荐使用)
bt1_generateXml.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
StringBuffer sb=new StringBuffer();
//开始拼接XML文件头
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//开始拼接xml根节点
sb.append("<smss>");
for (Sms sms : smsList) {
sb.append("<sms>"); //开始拼接address节点
sb.append("<address>");
sb.append(sms.getAddress());
sb.append("</address>"); //开始拼接body节点
sb.append("<body>");
sb.append(sms.getBody());
sb.append("</body>"); //开始拼接date节点
sb.append("<date>");
sb.append(sms.getDate());
sb.append("</date>"); sb.append("</sms>");
}
sb.append("</smss>"); //将数据保存到sd卡中
File file=new File(Environment.getExternalStorageDirectory().getPath(),"lucky.xml");
try {
FileOutputStream fos=new FileOutputStream(file); //文件输出流对应写操作
fos.write(sb.toString().getBytes());
fos.close(); //关闭流
} catch (Exception e) {
e.printStackTrace();
}
} }); bt2_generateXml.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//1.获取XmlSerializer类的实例,通过Xml这个工具列去获取
XmlSerializer serializer=Xml.newSerializer();
//2.设置XmlSerializer序列化器的参数
File file=new File(Environment.getExternalStorageDirectory().getPath(),"lucky2.xml");
FileOutputStream fos= null;
try {
fos = new FileOutputStream(file);
serializer.setOutput(fos,"utf-8");
} catch (Exception e) {
e.printStackTrace();
} //3.开始写xml文档开头
try {
serializer.startDocument("utf-8",true);
serializer.startTag(null,"smss");
//循环写sms节点
for (Sms sms : smsList) {
serializer.startTag(null,"sms"); //开始写address节点
serializer.startTag(null,"address");
serializer.text(sms.getAddress());
serializer.endTag(null,"address"); //开始写body节点
serializer.startTag(null,"body");
serializer.text(sms.getBody());
serializer.endTag(null,"body"); //开始写date节点
serializer.startTag(null,"date");
serializer.text(sms.getDate());
serializer.endTag(null,"date"); serializer.endTag(null,"sms");
}
serializer.endTag(null,"smss");
//写文档结尾
serializer.endDocument();
fos.close();//关闭流
} catch (Exception e) {
e.printStackTrace();
} }
});
}
}

2.xml文件的解析

(1)xml的数据来源于服务器,服务器的开发人员通过通过服务器的技术把数据包装成一个xml文件返回给客户端。

(2)Android 开发人员需要进行xml的解析,把我们关心的数据取出即可。

(3)服务器是以流的形式把数据返回。

源码部分:

<1>MainActivity.class

package com.example.lucky.test52xml;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import org.xmlpull.v1.XmlSerializer; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity {
Button bt1_generateXml;
Button bt2_generateXml;
TextView tv_show;
List<Sms> smsList; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1_generateXml=findViewById(R.id.bt1_generateXml);
bt2_generateXml=findViewById(R.id.bt2_generateXml);
tv_show=findViewById(R.id.tv_show); //获取资产管理者,来操作assets目录下的文件
try {
InputStream inputStream=getAssets().open("weather.xml");
List<Channel> weatherlist=WeatherParser.parserXml(inputStream); //调用我们定义的方法解析xml文件
StringBuffer sb1=new StringBuffer();
for (Channel channel : weatherlist) {
sb1.append(channel.toString()); //注意:channel的toString方法已经在Channel类中重写
}
tv_show.setText(sb1.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}

<2>Channel类

package com.example.lucky.test52xml;

public class Channel {
private String id;
private String city;
private String temp;
private String wind;
private String pm250; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} public String getTemp() {
return temp;
} public void setTemp(String temp) {
this.temp = temp;
} public String getWind() {
return wind;
} public void setWind(String wind) {
this.wind = wind;
} public String getPm250() {
return pm250;
} public void setPm250(String pm250) {
this.pm250 = pm250;
} @Override
public String toString() {
return "Channel{" +
"id='" + id + '\'' +
", city='" + city + '\'' +
", temp='" + temp + '\'' +
", wind='" + wind + '\'' +
", pm250='" + pm250 + '\'' +
'}';
}
}

<3>WeatherParser.class

package com.example.lucky.test52xml;

import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; public class WeatherParser { //服务器是以流的形式把数据返回的
public static List<Channel> parserXml(InputStream inputStream)throws Exception{
List<Channel> weatherLists=null;
Channel channel=null; //1.获取XmlPullParser解析的实例
XmlPullParser pullParser= Xml.newPullParser();
//2.设置XmlPullParser的参数
pullParser.setInput(inputStream,"utf-8");
//3.获取事件类型
int type=pullParser.getEventType();
while (type!=XmlPullParser.END_DOCUMENT){
switch (type){
case XmlPullParser.START_TAG: //若pullParser所指的标签是开始标签(例如:<channel id ='1'>为开始标签,</channel>为结束标签)
//4.判断pullParser所指的标签名
if("weather".equals(pullParser.getName())){
//5.创建集合对象
weatherLists=new ArrayList<>();
}else if("channel".equals(pullParser.getName())){
//6.创建channel对象
channel=new Channel();
//7.获取id值
String id=pullParser.getAttributeValue(0);
channel.setId(id);
}else if("city".equals(pullParser.getName())){
//8.获取city的数据
String city=pullParser.nextText(); //获取<city>北京</city> 标签包裹的内容:北京
channel.setCity(city);
}else if("wind".equals(pullParser.getName())){
//8.获取wind的数据
String wind=pullParser.nextText();
channel.setWind(wind);
}else if("pm250".equals(pullParser.getName())){
//8.获取pm250的数据
String pm250=pullParser.nextText();
channel.setWind(pm250);
}
break; //跳出switch语句,执行type=pullParser.next();语句,让pullParser向下移动
case XmlPullParser.END_TAG: //解析结束标志
if("channel".equals(pullParser.getName())){
//Channel对象的数据存到集合中
weatherLists.add(channel);
}
break; }
//pullParser不停的向下解析
type=pullParser.next(); }
return weatherLists;
}
}

Android 生成xml文件及xml的解析的更多相关文章

  1. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  2. android-pull方式解析xml文件以及XML文件的序列化

    android解析XML ---------------------------基础要像磐石 在android平台上可以使用SAX.DOM和自带的Pull解析器解析xml文件,本文主要介绍使用pull ...

  3. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  4. Android项目中的config.xml文件 “config.xml”

    Android应用程序需要保存一些配置时,可以将这些配置项放置到values/config.xml文件中. 实例分析: <?xml version="1.0" encodin ...

  5. xmlns:xsi ——是指xml文件遵守xml规范,xsi全名:xml schema instance

    http://blog.sina.com.cn/s/blog_4b6f8d150100nx3e.html http://blog.csdn.net/iaiti/article/details/4226 ...

  6. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  7. XML文件的创建和解析笔记

    解析XML的四种方法 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这 ...

  8. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  9. Java生成XML文件与XML文件的写入

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6651643.html  既然能在代码中解析XML文档获取数据,当然也能通过代码动态生成XML文档了. 与解析X ...

随机推荐

  1. Professional C# 6 and .NET Core 1.0 - Chapter 37 ADO.NET

    本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET 译文:C# 6 与 .NE ...

  2. ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程

    最近,经理让我搭建一个服务器,我从网上找了一篇比较好的教程,按教程一步步执行感觉挺顺利,所以准备整理一下这个教程.尊重原版注明出处:http://news.2ky.cn/Linux/ubuntu-12 ...

  3. JS中的两种刷新方法以及区别和适用范围

    在项目中有一个人信息修改的页面,但是修改后显示的却是修改之前的内容,分析问题后发现查询语句写在了修改语句之前,有些某些需要又必须这么写,但是修改信息后先却显示之前的信息也太不科学了. 所以我就想用js ...

  4. IFC文件解析

    什么是IFC? EXPRESS语言与IFC体系 一.IFC 1.IFC简介 IFC是一个数据交换标准, 用于不同系统交换和共享数据.当需要多个软件协同完成任务时, 不同系统之间就会出现数据交换和共享的 ...

  5. oracle 创建表 外键约束

    create table usertable( id int primary key, username ) not null, birthday date, sex ), address ) ); ...

  6. 虚拟机Ubuntu16.04安装lrzsz

    [系统环境] 宿主机:Win7 64位 虚拟机软件:Vmware workstation 12 虚拟机:Ubuntu 16.0.4 [目的] 配合Secure CRT使用rz,sz,方便在Ubuntu ...

  7. Part8-不用内存怎么行_我从内部看内存lesson1

  8. Java 享元设计

  9. 最近的一些零碎知识点,jquery遍历

    1.使按钮无法点击 $(“#btn”).attr("disable",true); 2.返回上一个页面 history.back(-1); 3.$(this).siblings() ...

  10. vitamio遇到的坑,都是不能播放

    在模拟器上可以运行,在真机上不能用,一点就app全退了,不知原因,没办法用as连接到真机上调试,才发现是版本过高的原因,不支持sdk 23,大家的办法都是改成21, targetSdkVersion ...