详解Android之解析XML文件三种方式(DOM,PULL,SAX)
发布时间 - 2026-01-10 23:18:58 点击率:次1.xml文件代码
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false" %>
<fqs>
<c:forEach items="${fqs}" var="fq">
<fq name="${fq.name}">
<content>${fq.content}</content>
<time>${fq.time}</time>
</fq>
</c:forEach>
</fqs>
2.XML网页效果图
3.Android代码
1.布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getXML"
android:text="获取XML数据" />
<ListView
android:id="@+id/lv_main_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main_pull"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getPULL"
android:text="获取PULL数据" />
<ListView
android:id="@+id/lv_mainpull_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main_sax"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="getSAX"
android:text="获取SAX数据" />
<ListView
android:id="@+id/lv_mainsax_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
<?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:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/tv_item_listview_name"
android:layout_weight="1"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/tv_item_listview_content"
android:layout_weight="1"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/tv_item_listview_time"
android:layout_weight="1"/>
</LinearLayout>
2.java代码
DOM解析代码
public class MainActivity extends AppCompatActivity {
private ListView lv_main_list;
private ProgressDialog progressDialog;
private List<FQ> fqs = new ArrayList<>();
private MyAdapter myadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main_list = (ListView) findViewById(R.id.lv_main_list);
myadapter = new MyAdapter();
lv_main_list.setAdapter(myadapter);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("小青正在拼命加載中.....");
}
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return fqs.size();
}
@Override
public Object getItem(int position) {
return fqs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.item_list,null);
ItemTag itemTag=new ItemTag();
itemTag.tv_name= (TextView) convertView.findViewById(R.id.tv_item_listview_name);
itemTag.tv_content= (TextView) convertView.findViewById(R.id.tv_item_listview_content);
itemTag.tv_tiem= (TextView) convertView.findViewById(R.id.tv_item_listview_time);
convertView.setTag(itemTag);
}
ItemTag itemTag= (ItemTag) convertView.getTag();
itemTag.tv_name.setText(fqs.get(position).getName());
itemTag.tv_content.setText(fqs.get(position).getContent());
itemTag.tv_tiem.setText(fqs.get(position).getTime());
return convertView;
}
}
public void getXML(View view) {
new MyTask().execute();
}
class MyTask extends AsyncTask {
//获取数据前
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] params) {
//获取网络数据
//1.定义获取网络的数据的路径
String path = "http://192.168.43.149:8080/dataResult.xhtml";
//2.实例化URL
try {
URL url = new URL(path);
//3.获取链接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//4.设置请求
httpURLConnection.setRequestMethod("GET");
//5.设置请求链接超时的时间
httpURLConnection.setConnectTimeout(5000);
//6.获取响应码
int code = httpURLConnection.getResponseCode();
if (code == 200) {
//7.获取返回过来的数据(XML)
InputStream is = httpURLConnection.getInputStream();
//8.使用DOM解析XML文件
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
Document document=documentBuilder.parse(is);
//获取根标签
Element root=document.getDocumentElement();
NodeList nodeList = root.getElementsByTagName("fq");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
//获取属性name
String name = element.getAttribute("name");
//获取子标签content,time
Element elementContent = (Element) element.getElementsByTagName("content").item(0);
String content = elementContent.getTextContent();
Element elementTime = (Element) element.getElementsByTagName("time").item(0);
String time = elementTime.getTextContent();
FQ fq = new FQ(name, content, time);
fqs.add(fq);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return fqs;
}
//获取数据后更新UI
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
progressDialog.cancel();
myadapter.notifyDataSetChanged();
}
}
}
PULL解析代码
public class MainPullActivity extends AppCompatActivity {
private ListView lv_mainpull_list;
private ProgressDialog progressDialog;
private List<FQ> fqs = new ArrayList<>();
private MyAdapter myadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_pull);
myadapter = new MyAdapter();
lv_mainpull_list = (ListView) findViewById(R.id.lv_mainpull_list);
lv_mainpull_list.setAdapter(myadapter);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("小青正在拼命加載中.....");
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return fqs.size();
}
@Override
public Object getItem(int position) {
return fqs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(MainPullActivity.this).inflate(R.layout.item_list, null);
ItemTag itemTag = new ItemTag();
itemTag.tv_name = (TextView) convertView.findViewById(R.id.tv_item_listview_name);
itemTag.tv_content = (TextView) convertView.findViewById(R.id.tv_item_listview_content);
itemTag.tv_tiem = (TextView) convertView.findViewById(R.id.tv_item_listview_time);
convertView.setTag(itemTag);
}
ItemTag itemTag = (ItemTag) convertView.getTag();
itemTag.tv_name.setText(fqs.get(position).getName());
itemTag.tv_content.setText(fqs.get(position).getContent());
itemTag.tv_tiem.setText(fqs.get(position).getTime());
return convertView;
}
}
public void getPULL(View view) {
new MyTask().execute();
}
class MyTask extends AsyncTask {
private FQ fq;
//获取数据前
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] params) {
//获取网络数据
//1.定义获取网络的数据的路径
String path = "http://192.168.43.149:8080/dataResult.xhtml";
//2.实例化URL
try {
URL url = new URL(path);
//3.获取链接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//4.设置请求
httpURLConnection.setRequestMethod("GET");
//5.设置请求链接超时的时间
httpURLConnection.setConnectTimeout(5000);
//6.获取响应码
int code = httpURLConnection.getResponseCode();
if (code == 200) {
//7.获取返回过来的数据(XML)
InputStream is = httpURLConnection.getInputStream();
//8.解析XML
//使用PULL解析XML文件
XmlPullParser pullParser= Xml.newPullParser();
pullParser.setInput(is,"UTF-8");
int type=pullParser.getEventType();
while (type!=XmlPullParser.END_DOCUMENT){
switch (type){
case XmlPullParser.START_TAG:
//获取开始标签名字
String startTafName=pullParser.getName();
if("fq".equals(startTafName)){
fq = new FQ();
String name=pullParser.getAttributeValue(0);
fq.setName(name);
}else if ("content".equals(startTafName)){
String content=pullParser.nextText();
fq.setContent(content);
}else if ("time".equals(startTafName)){
String time=pullParser.nextText();
fq.setTime(time);
}
break;
case XmlPullParser.END_TAG:
//获取接受标签的名字
String endtagname=pullParser.getName();
if("fq".equals(endtagname)){
fqs.add(fq);
}
break;
}
type=pullParser.next();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return fqs;
}
//获取数据后更新UI
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
progressDialog.cancel();
myadapter.notifyDataSetChanged();
}
}
}
SAX解析代码
public class MainSaxActivity extends AppCompatActivity {
private ListView lv_mainsax_list;
private ProgressDialog progressDialog;
private List<FQ> fqs = new ArrayList<>();
private MyAdapter myadapter;
private String currentTag = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_sax);
lv_mainsax_list = (ListView) findViewById(R.id.lv_mainsax_list);
myadapter = new MyAdapter();
lv_mainsax_list.setAdapter(myadapter);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("小青正在拼命加載中.....");
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return fqs.size();
}
@Override
public Object getItem(int position) {
return fqs.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(MainSaxActivity.this).inflate(R.layout.item_list, null);
ItemTag itemTag = new ItemTag();
itemTag.tv_name = (TextView) convertView.findViewById(R.id.tv_item_listview_name);
itemTag.tv_content = (TextView) convertView.findViewById(R.id.tv_item_listview_content);
itemTag.tv_tiem = (TextView) convertView.findViewById(R.id.tv_item_listview_time);
convertView.setTag(itemTag);
}
ItemTag itemTag = (ItemTag) convertView.getTag();
itemTag.tv_name.setText(fqs.get(position).getName());
itemTag.tv_content.setText(fqs.get(position).getContent());
itemTag.tv_tiem.setText(fqs.get(position).getTime());
return convertView;
}
}
public void getSAX(View view) {
new MyTask().execute();
}
class MyTask extends AsyncTask {
private FQ fq;
//获取数据前
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
@Override
protected Object doInBackground(Object[] params) {
//获取网络数据
//1.定义获取网络的数据的路径
String path = "http://192.168.43.149:8080/dataResult.xhtml";
//2.实例化URL
try {
URL url = new URL(path);
//3.获取链接对象
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//4.设置请求
httpURLConnection.setRequestMethod("GET");
//5.设置请求链接超时的时间
httpURLConnection.setConnectTimeout(5000);
//6.获取响应码
int code = httpURLConnection.getResponseCode();
if (code == 200) {
//7.获取返回过来的数据(XML)
InputStream is = httpURLConnection.getInputStream();
//8.解析XML
//使用SAX解析XML文件
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
saxParser.parse(is, new DefaultHandler() {
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
currentTag = localName;
if ("fq".equals(localName)) {
//实例化对象
fq = new FQ();
String name = attributes.getValue(0);
fq.setName(name);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
currentTag=null;
if ("fq".equals(localName)){
fqs.add(fq);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
if ("content".equals(currentTag)) {
String content = new String(ch, start, length);
fq.setContent(content);
}else if ("time".equals(currentTag)) {
String time = new String(ch, start, length);
fq.setTime(time);
}
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
return fqs;
}
//获取数据后更新UI
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
progressDialog.cancel();
myadapter.notifyDataSetChanged();
}
}
}
实体类
public class FQ {
private String name;
private String content;
private String time;
public FQ(){}
public FQ(String name, String time, String content) {
this.name = name;
this.time = time;
this.content = content;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
public class ItemTag {
public TextView tv_name;
public TextView tv_content;
public TextView tv_tiem;
}
配置文件添加联网权限
<!-- 添加联网的权限 --> <uses-permission android:name="android.permission.INTERNET" />
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# xml解析
# xml解析方式
# android中xml解析方式
# Android 创建与解析XML(五)——详解Dom4j方式
# Android开发之DOM解析xml文件的方法
# Android编程解析XML方法详解(SAX
# DOM与PULL)
# Android创建与解析XML(二)——详解Dom方式
# Android应用中使用DOM方式解析XML格式数据的基本方法
# Android解析XML的三种方式SAX、Pull、Dom
# Android利用SAX对XML进行增删改查操作详解
# Android利用Dom对XML进行增删改查操作详解
# 小青
# 配置文件
# 大家多多
# 实体类
# AppCompatActivity
# extends
# private
# DOM
# public
# MainActivity
# ProgressDialog
# MyAdapter
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
重庆市网站制作公司,重庆招聘网站哪个好?
详解Huffman编码算法之Java实现
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何在云指建站中生成FTP站点?
太平洋网站制作公司,网络用语太平洋是什么意思?
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何处理CORS跨域请求?(配置示例)
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Python进程池调度策略_任务分发说明【指导】
如何用5美元大硬盘VPS安全高效搭建个人网站?
在线教育网站制作平台,山西立德教育官网?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何彻底卸载建站之星软件?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel怎么使用Intervention Image库处理图片上传和缩放
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
如何在云虚拟主机上快速搭建个人网站?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
高防服务器租用如何选择配置与防御等级?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
网站制作企业,网站的banner和导航栏是指什么?
三星、SK海力士获美批准:可向中国出口芯片制造设备
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
历史网站制作软件,华为如何找回被删除的网站?
在Oracle关闭情况下如何修改spfile的参数
如何在IIS中配置站点IP、端口及主机头?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
深圳网站制作培训,深圳哪些招聘网站比较好?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
WordPress 子目录安装中正确处理脚本路径的完整指南
利用vue写todolist单页应用
如何在 Pandas 中基于一列条件计算另一列的分组均值
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
Laravel怎么实现模型属性的自动加密

