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. CSS简单介绍及应用

    CSS的简介 概述: Cascading Style Sheets, 层叠样式表. 作用: 用来美化页面的. 分类: 行内样式: //直接写在元素(html的标签)中的样式. 内部样式: //写在&l ...

  2. CentOS7 启动docker.service失败(code=exited, status=1/FAILURE)

    启动报错 Job for docker.service failed because the control process exited with error code. See "sys ...

  3. 06-Location详解之精准匹配

    之前nginx不是编译过吗?现在重新make install一下. 刚刚这个是我们新安装的.原始版的nginx,配置文件比较少,便于我们做调试. 试试精准匹配的概念. 匹配的是/.优先匹配这个最精准的 ...

  4. php学习第一天-勤劳致富

    所谓“勤劳致富”,是很有科学依据的,且是经过我的亲身实践的. 自毕设突然转变为开发项目之后,整个天都变了.先是妹子给我订的票被强行取消,然后又是师兄的一句“***一小时就搞定了”,说明一下这个***是 ...

  5. 【bzoj1614】[Usaco2007 Jan]Telephone Lines架设电话线

    题目描述 Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用.     FJ的农场周围分布着N(1 <= N < ...

  6. SpringBoot23 分模块开发

    1 开发环境说明 JDK:1.8 MAVEN:3.5 IDEA:2017.2.5 SpringBoot:2.0.3.RELEASE 2 创建SpringBoot项目 2.1 项目信息 2.2 添加项目 ...

  7. keepalived配置

    keepalived配置 之前已经安装完成,接下来我们配置keepalived. 假设我的ip地址如下: server1:192.168.0.150 server2:192.168.0.157 vip ...

  8. 第一次C语言作业:博客随笔

    1)你觉得大学和高中有什么差别?具体学习上哪? 大学自主学习较多,锻炼自己独立的品质.在学习上,增加了课程的深度和难度,由更多的活动. 2)我希望大学的师生关系是?阅读上述博客后对师生关系有何感想? ...

  9. oracle 中用法dual

    dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情. dual是一个虚拟表,用来构成select的语法规则,oracle保证d ...

  10. ubuntu 下python安装及hello world

    //@desn:ubuntu 下python安装及hello world //@desn:码字不宜,转载请注明出处 //@author:张慧源  <turing_zhy@163.com> ...