Pull解析xml文件简单案例

本文介绍如何使用Pull解析器解析XML文件,包括无属性标签和带属性标签的解析方法,并展示了具体的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pull解析需要自行载入jar包,本文以解析一个student.xml文件为例

1、Pull,以事件常量的方法进行解析

2、解析之后存储数据 

a:List<Student>

b:List<Map<String,Object>>

3、pull解析的事件常量

(XmlPullParser.START_DOCUMENT);//0 开始解析文档

(XmlPullParser.END_DOCUMENT);// 1 结束解析

(XmlPullParser.START_TAG);//2 开始该标签的解析

(XmlPullParser.END_TAG);// 3 结束该标签


1、标签不带属性

<?xml version="1.0" encoding="UTF-8"?>
<class>
<student>
<id>1</id>
<name>tom</name>
<age>20</age>
</student>
<student>
<id>2</id>
<name>jack</name>
<age>21</age>
</student>
<student>
<id>3</id>
<name>rose</name>
<age>22</age></student>
</class>


Student类


解析类

public class Demo01 {
public static void main(String[] args) {
System.out.println(getData());
}


// 解析xml使用集合存储
public static List<Student> getData() {
List<Student> list = null;
Student stu = null;


try {
// 创建pull解析器工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 创建pull解析器
XmlPullParser parser = factory.newPullParser();
// 指定解析的文件
parser.setInput(new FileReader("student01.xml"));


// pull解析的事件常量
// System.out.println(XmlPullParser.START_DOCUMENT);// 0
// System.out.println(XmlPullParser.END_DOCUMENT);// 1
// System.out.println(XmlPullParser.START_TAG);// 2
// System.out.println(XmlPullParser.END_TAG);// 3
// System.out.println(XmlPullParser.TEXT);// 4


// 获得事件类型
int type = parser.getEventType();
// 直到解析的事件为END_DOCUMENT,表示文档解析结束
while (type != XmlPullParser.END_DOCUMENT) {// 1


// 获得标签名
String tag = parser.getName();


switch (type) {
case XmlPullParser.START_DOCUMENT:// 0
// 表示文档开始,创建集合
list = new ArrayList<>();
break;


case XmlPullParser.START_TAG:// 2
// 判断标签名
if ("student".equals(tag)) {
stu = new Student();
}
if ("id".equals(tag)) {
// 获得标签之间的值
String value = parser.nextText();
stu.setId(Integer.parseInt(value));
}
if ("name".equals(tag)) {
stu.setName(parser.nextText());
}
if ("age".equals(tag)) {
stu.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:// 3
// 判断结束标签为student
if ("student".equals(tag)) {
list.add(stu);
}
break;
}
// 继续判断下一个事件类型******
// ******
type = parser.next();
}


} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}


2、标签带属性


解析类代码

public class Demo03 {
public static void main(String[] args) {
System.out.println(getData());
}


// 解析xml使用集合存储
public static List<Student> getData() {
List<Student> list = null;
Student stu = null;


try {
// 创建pull解析器工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 创建pull解析器
XmlPullParser parser = factory.newPullParser();
// 指定解析的文件
parser.setInput(new FileReader("student02.xml"));


// 获得事件类型
int type = parser.getEventType();
// 直到解析的事件为END_DOCUMENT,表示文档解析结束
while (type != XmlPullParser.END_DOCUMENT) {// 1


// 获得标签名
String tag = parser.getName();


switch (type) {
case XmlPullParser.START_DOCUMENT:// 0
// 表示文档开始,创建集合
list = new ArrayList<>();
break;


case XmlPullParser.START_TAG:// 2
// 判断标签名
if ("student".equals(tag)) {
stu = new Student();


// 获得student标签的属性
// 获得属性个数
int n = parser.getAttributeCount();
for (int i = 0; i < n; i++) {
// 获得属性名和属性值
String name = parser.getAttributeName(i);
String value = parser.getAttributeValue(i);
if ("id".equals(name))
stu.setId(Integer.parseInt(value));
}
}


if ("name".equals(tag)) {
stu.setName(parser.nextText());
}
if ("age".equals(tag)) {
stu.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:// 3
// 判断结束标签为student
if ("student".equals(tag)) {
list.add(stu);
}
break;
}
// 继续判断下一个事件类型******
// ******
type = parser.next();
}


} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}


内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值