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. SSM框架整合(Spring+SrpingMVC+Mybatis) 简单案例

    简介: SSM框架是Spring,SpringMVC 和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,dao层四层. Spring实现 ...

  2. 3-1 Git下载与安装

    https://desktop.github.com/

  3. 利用Chrome的Performance工具排查页面性能问题(原叫timeline)

    当页面中发生卡顿,最先考虑的是swf文件造成的卡顿,经过排查发现不是swf造成的影响,利用Chrome的Performance工具发现页面中的一些元素不断在重新布局,造成潜在的性能瓶颈. 首先在Chr ...

  4. WEB前端--JavaScript

    JavaScript JavaScript基础 一.JavaScript简介 JavaScript是一种嵌入到HTML文件中的描述性语言,由浏览器的解释器将其动态地处理成可执行的代码,能独立地完成与客 ...

  5. ensemble 的2篇入门 文章

    python 篇: http://machinelearningmastery.com/ensemble-machine-learning-algorithms-python-scikit-learn ...

  6. 618F Double Knapsack

    传送门 题目大意 分析 代码 #include<iostream> #include<cstdio> #include<cstring> #include<s ...

  7. selenium+phantomjs解析JS

    背景知识: PhantomJS 是一个基于WebKit的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, J ...

  8. MFC可视化 列表控件的使用

    1.应该加入头文件   #include <Atlbase.h>   2.示例     类向导给列表控件绑定变量m_list DWORD   dwExStyle=LVS_EX_FULLRO ...

  9. Head First Python之人人都爱列表(1-初识Python)

    IDLE 内置函数==BIF==built-in function 默认地,内置函数都是紫色,字符串是绿色,关键字是橙色. tab:自动补全 Alt-P:前一个 Alt-N:下一个 列表的特性 列表看 ...

  10. Visual Studio 2013 新增功能:“Browser Link”

    今天新装了 Visual Studio 2013, 使用 VS2013 打开一个现有的 WEB 网站, 在调试网站的时候出现在了脚本错误,一个文件名叫 "browserLink", ...