文章目录

  • 零、学习目标
  • 一、解析XML
    • (一)XML概述
    • (二)解析XML的方法
  • 二、案例演示 - 读取解析XML
    • (一)运行效果
    • (二)涉及知识点
    • (三)实现步骤
      • 1、创建安卓应用【ReadParseXML】
      • 2、将背景图片拷贝到drawable目录
      • 3、创建学生信息XML文件
      • 4、创建主布局资源文件activity_main.xml
      • 5、字符串资源文件strings.xml
      • 6、创建学生实体类 - Student
      • 7、主界面类 - MainActivity
      • 8、启动应用,查看效果
  • 三、解析JSON
    • (一)JSON概述
    • (二)解析JSON的方法
  • 四、案例演示 - 读取解析SON
    • (一)运行效果
    • (二)涉及知识点
    • (三)实现步骤
      • 1、创建安卓应用【ReadParseJSON】
      • 2、将背景图片拷贝到drawable目录
      • 3、主布局资源文件activity_main.xml
      • 4、创建教材信息文件
      • 5、字符串资源文件strings.xml
      • 6、主界面类 - MainActivity
      • 7、启动应用,查看效果
  • 五、参考学习案例
    • 1、JSON解析 - 地震汇报(Quake Report)

零、学习目标

  1. 能够读取并解析XML文件
  2. 能够读取并解析JSON文件

一、解析XML

(一)XML概述

  • XML(eXtensible Markup Language),可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。XML是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

(二)解析XML的方法

  1. 通过DOM解析XML
  2. 通过XmlPullParser解析XML.

二、案例演示 - 读取解析XML

(一)运行效果

(二)涉及知识点

  1. 按钮(Button)
  2. 标签(TextView)
  3. 文档对象模型(DOM)
  4. XML解析器(XmlPullParser)

(三)实现步骤

1、创建安卓应用【ReadParseXML】


2、将背景图片拷贝到drawable目录

3、创建学生信息XML文件

  • 切换到Project视图,创建assets目录,在里面创建student.xml
  • 切换到Android视图,查看刚才创建的student.xml文件

4、创建主布局资源文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:orientation="vertical"android:padding="10dp" ><Buttonandroid:id="@+id/btnReadXML"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doReadXML"android:text="@string/read_xml" /><Buttonandroid:id="@+id/btnParseXML1"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doParseXML1"android:text="@string/parse_xml_1" /><Buttonandroid:id="@+id/btnParseXML2"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doParseXML2"android:text="@string/parse_xml_2" /><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginBottom="10dp"android:layout_marginTop="10dp"android:background="#bbbbbb" /><ScrollViewandroid:id="@+id/svContent"android:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/tvContent"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#0000ff"android:textSize="20sp" /></ScrollView></LinearLayout>

5、字符串资源文件strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">读取解析XML</string><string name="read_xml">读取XML文件</string><string name="parse_xml_1">解析XML文件(通过DOM)</string><string name="parse_xml_2">解析XML文件(通过XmlPullParser)</string>
</resources>

6、创建学生实体类 - Student

package net.hw.read_parse_xml;/*** 功能:学生实体类* 作者:华卫* 日期:2020年12月15日*/
public class Student {private int id;private String name;private String gender;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +'}';}
}

7、主界面类 - MainActivity

package net.hw.read_parse_xml;import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
/*** 功能:读取解析XML文件* 作者:华卫* 日期:2020年12月15日*/
public class MainActivity extends AppCompatActivity {private TextView tvContent; // 显示文件内容的标签@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局文件设置用户界面setContentView(R.layout.activity_main);// 通过资源标识符获取控件实例tvContent = findViewById(R.id.tvContent);}/*** 读取XML文件** @param view*/public void doReadXML(View view) {try {// 打开assets目录的文件,获得字节输入流InputStream is = getResources().getAssets().open("student.xml");// 获取字节输入流长度int length = is.available();// 定义字节缓冲区byte[] buffer = new byte[length];// 读取字节输入流,数据存放到字节缓冲区is.read(buffer);// 将字节缓冲区内容转换成字符串String content = new String(buffer, "utf-8");// 设置标签文本颜色tvContent.setTextColor(Color.BLUE);// 将字符串呈现到标签里tvContent.setText(content);} catch (IOException e) {e.printStackTrace();}}/*** 解析XML文件(通过DOM)** @param view*/public void doParseXML1(View view) {// 清空标签内容tvContent.setText("");try {// 打开assets目录的文件,获得字节输入流InputStream is = getResources().getAssets().open("student.xml");// 定义文档生成器工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 定义文档生成器DocumentBuilder builder = factory.newDocumentBuilder();// 解析字节输入流,获取文档对象Document document = builder.parse(is);// 获取文档根节点Element root = document.getDocumentElement();// 获取一级子节点列表NodeList nodeList1 = root.getChildNodes();// 遍历一级子节点列表for (int i = 0; i < nodeList1.getLength(); i++) {// 获取一级子节点Node node1 = nodeList1.item(i);// 判断是不是元素节点if (node1.getNodeType() == Node.ELEMENT_NODE) {// 判断一级子节点是否有属性if (node1.hasAttributes()) {// 将属性值添加到标签里tvContent.append(node1.getAttributes().item(0).getNodeValue() + " ");}// 获取二级子节点列表NodeList nodeList2 = node1.getChildNodes();// 遍历二级子节点列表for (int j = 0; j < nodeList2.getLength(); j++) {// 获取二级子节点Node node2 = nodeList2.item(j);// 判断是不是元素节点if (node2.getNodeType() == Node.ELEMENT_NODE) {// 将元素节点的文本内容添加到标签里tvContent.append(node2.getTextContent() + "  ");}}// 让标签里的内容换行tvContent.append("\n");}}// 设置标签文本颜色tvContent.setTextColor(Color.RED);} catch (IOException e) {e.printStackTrace();} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();}}/*** 解析XML文件(通过XmlPullParser)** @param view*/public void doParseXML2(View view) {// 清空标签内容tvContent.setText("");try {// 打开assets目录的文件,获得字节输入流InputStream is = getResources().getAssets().open("student.xml");// 创建XML解析器工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 获取XML解析器XmlPullParser parser = factory.newPullParser();// 设置解析源parser.setInput(is, "utf-8");// 获取事件类型int event = parser.getEventType();// 声明学生列表List<Student> studentList = null;// 声明学生Student student = null;// 遍历文档所有节点while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_DOCUMENT: // 开始文档// 实例化学生列表studentList = new ArrayList<Student>();break;case XmlPullParser.START_TAG: // 开始标签// 获取标签名String tagName = parser.getName();// 判断标签名,执行不同操作if (tagName.equals("student")) {// 实例化学生student = new Student();// 判断该节点是否有属性if (parser.getAttributeCount() > 0) {// 设置学号student.setId(Integer.valueOf(parser.getAttributeValue(0)));}} else if (tagName.equals("name")) {// 设置姓名student.setName(parser.nextText());} else if (tagName.equals("gender")) {// 设置性别student.setGender(parser.nextText());} else if (tagName.equals("age")) {// 设置年龄student.setAge(Integer.valueOf(parser.nextText()));}break;case XmlPullParser.END_TAG: // 结束标签// 获取标签名tagName = parser.getName();if (tagName.equals("student")) {// 将学生添加到学生列表studentList.add(student);}break;}// 获取下一个节点的事件类型event = parser.next();}// 遍历学生列表for (Student stu : studentList) {// 将每条学生信息添加到标签里tvContent.append(stu.getId() + " " + stu.getName() + " " + stu.getGender() + " " + stu.getAge() + "\n");}// 设置标签文本颜色tvContent.setTextColor(Color.GREEN);} catch (IOException e) {e.printStackTrace();} catch (XmlPullParserException e) {e.printStackTrace();}}
}

8、启动应用,查看效果

三、解析JSON

(一)JSON概述

  • JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

(二)解析JSON的方法

  • 利用JSONObject和JSONArray解析JSON对象和JSON数组

四、案例演示 - 读取解析SON

(一)运行效果

(二)涉及知识点

  1. 按钮(Button)
  2. 标签(TextView)
  3. JSOn对象(JSONObject)
  4. JSON数组(JSONArray)

(三)实现步骤

1、创建安卓应用【ReadParseJSON】


2、将背景图片拷贝到drawable目录

3、主布局资源文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:orientation="vertical"android:padding="10dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="horizontal"><Buttonandroid:id="@+id/btnReadJSON"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doReadJSON"android:text="@string/read_json"android:textSize="20sp" /><Buttonandroid:id="@+id/btnParseJson"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="doParseJSON"android:text="@string/parse_json"android:textSize="20sp" /></LinearLayout><ImageViewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginTop="10dp"android:layout_marginBottom="10dp"android:background="#bbbbbb" /><ScrollViewandroid:id="@+id/svContent"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tvContent"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#0000ff"android:textSize="20sp" /></ScrollView>
</LinearLayout>

4、创建教材信息文件

  • 切换到Project视图,创建assets目录,在里面创建textbook.json
  • 切换到Android视图,查看刚才创建的textbook.json
[{"id": "1","name": "计算机基础教程","press": "清华大学出版社","author": "李晓云","price": "30.5"},{"id": "2","name": "Java程序设计","press": "水利水电出版社","author": "张国锋","price": "40"},{"id": "3","name": "安卓应用开发","press": "北京大学出版社","author": "郑晓华","price": "60.5"},{"id": "4","name": "PHP应用开发教程","press": "南京大学出版社","author": "滕玉国","price": "27.5"}
]

5、字符串资源文件strings.xml

<resources><string name="app_name">读取解析JSON</string><string name="read_json">读取JSON</string><string name="parse_json">解析JSON</string>
</resources>

6、主界面类 - MainActivity

package net.hw.read_parse_json;import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.IOException;
import java.io.InputStream;
/*** 功能:读取解析JSON* 作者:华卫* 日期:2020年12月15日*/
public class MainActivity extends AppCompatActivity {private TextView tvContent; // 显示内容的标签private String content; // 文件内容字符串@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局文件设置用户界面setContentView(R.layout.activity_main);// 通过资源标识获得控件实例tvContent = findViewById(R.id.tvContent);}/*** 读取JSON** @param view*/public void doReadJSON(View view) {try {// 读取assets目录里的文件,获取字节输入流InputStream is = getResources().getAssets().open("textbook.json");// 获取字节输入流长度int length = is.available();// 定义字节缓冲区byte[] buffer = new byte[length];// 读取字节输入流,将数据保存在字节缓冲区里is.read(buffer);// 将字节缓冲区的数据转换成字符串content =new String(buffer, "utf-8");// 将字符串显示在标签里tvContent.setText(content);// 设置标签的文本颜色tvContent.setTextColor(Color.BLUE);// 关闭字节输入流is.close();} catch (IOException e) {e.printStackTrace();}}/*** 解析JSON** @param view*/public void doParseJSON(View view) {// 判断用户是否先读取了JSONif (content == null) {Toast.makeText(this, "请先读取JSON!", Toast.LENGTH_LONG).show();} else {try {// 清空标签内容tvContent.setText("");// 创建Json数组JSONArray jsonArray = new JSONArray(content);// 遍历Json数组for (int i = 0; i < jsonArray.length(); i++) {// 获取Json对象JSONObject jsonObject = jsonArray.getJSONObject(i);// 对于Json对象按键取值String id = jsonObject.getString("id");String name = jsonObject.getString("name");String press = jsonObject.getString("press");String author = jsonObject.getString("author");String price = jsonObject.getString("price");// 拼接成一个图书信息String book = "编号:" + id + "\n书名:《" + name + "》\n出版社:" + press + "\n作者:" + author + "\n单价:" + price + "\n\n";// 将图书信息添加到标签里tvContent.append(book);// 设置标签的文本颜色tvContent.setTextColor(Color.RED);}} catch (JSONException e) {e.printStackTrace();}}}
}

7、启动应用,查看效果

五、参考学习案例

1、JSON解析 - 地震汇报(Quake Report)

链接地址:https://blog.csdn.net/weixin_45075891/article/details/112913764

安卓学习笔记30:解析XML与JSON相关推荐

  1. android学习笔记30——AndroidMainfest.xml

    Manifest.xml文件的职责: 指定APP的包名. 声明四大组件, 以及启动方式. 指定APP运行的进程名称. 指定APP权限. 指定最小API版本. 指定需要连接的库. Manifest.xm ...

  2. 2020年安卓学习笔记目录

    文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...

  3. Android学习笔记之AndroidManifest.xml文件解析(摘自皮狼的博客)

    Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它 ...

  4. 安卓学习笔记07:事件处理、窗口跳转与传递数据

    文章目录 零.学习目标 一.三个基本控件 1.标签控件(TextView) 2.编辑框控件(EditText) 3.按钮控件(Button) 二.安卓事件处理机制 (一)安卓事件处理概述 (二)安卓事 ...

  5. 很low的安卓学习笔记(一、实用技巧)

    很low的安卓学习笔记(一.实用技巧) 一.学习了几天的实用技巧小总结: 1.规范的定义内容的格式: 2.一些快捷键 3.将xxx.xml布局改为Activity中可以调用的View视图 4.当左下角 ...

  6. 安卓学习笔记3——登录界面UI

    安卓学习笔记3--登录界面UI 一.登录界面UI 1.根据需求写UI 2.主活动 3.主活动调用的读写文件的工具类 4.效果展示 二.总结与改进 不足: 1.密码分割采用字符串:当密码和用户名包含该字 ...

  7. GB28181学习笔记6 解析invite命令

    GB28181学习笔记6 解析invite命令 一.信令流程 1. 实时信令流程 点播流程: 上级平台向下级发送INVITE请求,请求实时视频 下级平台回复200OK 上级平台回复ACK确认 关闭视频 ...

  8. 安卓学习笔记之骚扰拦截

    安卓学习笔记之骚扰拦截 1.监听电话状态 2.检测来电号码是否匹配拦截条件 3.若匹配,则挂断电话 实例代码: 获取TelephonyManager 对象,并监听来电状态 TelephonyManag ...

  9. Android学习笔记43:XML文件解析(Pull方式)

    解析XML文档的方法是很多的,除了常用的SAX和DOM方法以外,还可以使用Java自带的Pull来解析XML文档. 1.使用Pull解析器解析XML文档 Pull解析器的运行方式和SAX解析器很相似, ...

最新文章

  1. ZOJ 3329 One Person Game 带环的概率DP
  2. 管理敏捷迭代任务和任务协作
  3. MATLAB调用C++程序
  4. 如何正确理解商业智能(BI)?
  5. innodb下的mvcc_从InnoDB了解MVCC
  6. xml格式怎么转换excel_pdf怎么转换成excel?这个转换技巧你值得拥有!
  7. VS2017 15.4提供预览版,面向Windows 10秋季更新(FCU)
  8. Bailian4072 判断多个点是否在同一直线【数学】
  9. 我私藏的一个超级无敌好用的 Java 工具类库
  10. Caffe学习1-图像识别与数据可视化
  11. 计算机大赛获奖团队采访,坚持勤奋铸就无悔青春——全国大学生数学建模大赛一等奖获奖者专访...
  12. ps之选区抠图,发丝
  13. Ubuntu11设置VGA分辨率
  14. RocksDB 入门
  15. 风格化(Stylization)
  16. 上榜豆瓣2020年度经管榜,让《重来3》带你逃离内卷、摆脱焦虑
  17. 计算机设计大赛指导老师的申报书,附件大赛作品申报书.DOC
  18. 液晶显示屏划痕修复方法
  19. unionid openid微信php,openid与unionid
  20. 怎样用计算机排名,小红书排名软件教程,小红书关键词排名软件怎么用

热门文章

  1. Android 内存泄漏之handler
  2. 组合学讲义 李乔(2ed)-习题1.1-6组合恒等式题解
  3. TikZ绘图示例——尺规作图:任意等分半圆弧
  4. 解决Ubuntu系统终端运行python文件报错“ImportError/ModuleNotFoundError:No Module named xx”
  5. SQL Server as(给查询结果指定列名)
  6. python嵌套字典的建立_python – 从Pandas DataFrame创建复杂的嵌套字典
  7. Sublime Merge Stage时提示系统找不到指定的文件
  8. python里的拼接_Python拼接字符串的7种方法总结
  9. flume数据采集_大数据采集系统Flume集群部署
  10. python3.7.3配置环境变量_配置环境变量切换到python3.7