Xml之Pull解析
来源:互联网 发布:java工厂设计模式原理 编辑:程序博客网 时间:2024/05/16 06:47
1小猫(标签中不带属性信息)
1
2
- <cats>
3
- <cat>
4
<id>1</id>
5
<name>波斯猫</name>
6
</cat>
7
- <cat>
8
<id>2</id>
9
<name>机器猫</name>
10
</cat>
11
- <cat>
12
<id>3</id>
13
<name>越野猫</name>
14
</cat>
15
- <cat>
16
<id>4</id>
17
<name>装甲猫</name>
18
</cat>
19
- <cat>
20
<id>5</id>
21
<name>超音速猫</name>
22
</cat>
23
</cats>
代码
1
2
/**用Pull解析,解析cat.xml
3
* @author Administrator
4
*
5
*/
6
public class Demo01PullCat {
7
8
public static void main(String[] args) throws Exception {
9
//1.获取解析器的工厂
10
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
11
//2.利用工厂对象获取解析器
12
XmlPullParser parser = factory.newPullParser();
13
//3.设置要解析的数据源
14
parser.setInput(new FileReader("cat.xml"));
15
//4.首次获取事件码
16
int eventType = parser.getEventType();//获取到0(文档开始事件)
17
ArrayList<Cat> list = null;
18
Cat cat = null;
19
while(eventType != XmlPullParser.END_DOCUMENT){//在到达文档结束标签</cats>之前,一直循环
20
//获取当前正在解析的标签:
21
String tag = parser.getName();
22
switch (eventType) {
23
case XmlPullParser.START_DOCUMENT://类似于SAX解析的startDocument()
24
list = new ArrayList<Cat>();
25
break;
26
case XmlPullParser.START_TAG://类似于SAX解析的startElement()
27
if("cat".equals(tag)){
28
cat = new Cat();
29
}else if("id".equals(tag)){
30
cat.setId(parser.nextText());//获取对象中的一个子标签里面的文本内容!!!!!
31
}else if("name".equals(tag)){
32
cat.setName(parser.nextText());
33
}
34
break;
35
case XmlPullParser.END_TAG://类似于SAX解析的endElement()
36
if("cat".equals(tag)){//如果遇到了对象结束标签</cat>,说明cat对象属性已经组装完毕,可以加入list
37
list.add(cat);
38
}
39
break;
40
default:
41
break;
42
}
43
//千万别忘了:最后要
44
eventType = parser.next();//获取下一次的事件类型,否则会陷入死循环.
45
}
46
//while循环结束了
47
for(Cat c:list){
48
System.out.println(c);
49
}
50
}
51
52
}
1
public class Cat {
2
private String id;
3
private String name;
4
public String getId() {
5
return id;
6
}
7
public void setId(String id) {
8
this.id = id;
9
}
10
public String getName() {
11
return name;
12
}
13
public void setName(String name) {
14
this.name = name;
15
}
16
17
public String toString() {
18
return "Cat [id=" + id + ", name=" + name + "]";
19
}
20
21
}
2第二只小猫咪(标签中带属性信息)
1
2
- <cats>
3
- <cat age="1">
4
<id>1</id>
5
<name>波斯猫</name>
6
</cat>
7
- <cat age="2">
8
<id>2</id>
9
<name>雪地猫</name>
10
</cat>
11
- <cat age="3">
12
<id>3</id>
13
<name>越野猫</name>
14
</cat>
15
</cats>
代码
1
/**用Pull解析,解析cat02.xml
2
* @author Administrator
3
*
4
*/
5
public class Demo01PullCat {
6
7
public static void main(String[] args) throws Exception {
8
//1.获取解析器的工厂
9
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
10
//2.利用工厂对象获取解析器
11
XmlPullParser parser = factory.newPullParser();
12
//3.设置要解析的数据源
13
parser.setInput(new FileReader("cat02.xml"));
14
//4.首次获取事件码
15
int eventType = parser.getEventType();//获取到0(文档开始事件)
16
ArrayList<Cat> list = null;
17
Cat cat = null;
18
while(eventType != XmlPullParser.END_DOCUMENT){//在到达文档结束标签</cats>之前,一直循环
19
//获取当前正在解析的标签:
20
String tag = parser.getName();
21
switch (eventType) {
22
case XmlPullParser.START_DOCUMENT://类似于SAX解析的startDocument()
23
list = new ArrayList<Cat>();
24
break;
25
case XmlPullParser.START_TAG://类似于SAX解析的startElement()
26
if("cat".equals(tag)){
27
cat = new Cat();
28
//解析<cat age="22" >里面的age属性
29
String value = parser.getAttributeValue(0);//获取当前标签里面的0下标的属性
30
cat.setAge(Integer.parseInt(value));
31
// int attributeCount = parser.getAttributeCount();//获取当前标签有多少个属性
32
// String name = parser.getAttributeName(index);//获取指定下标的属性的名字
33
// String attributeValue = parser.getAttributeValue(null, "age");
34
//第一个参数固定传null,
35
//第二个参数传属性名,该方法可以获取该属性的值
36
}else if("id".equals(tag)){
37
cat.setId(parser.nextText());//获取对象中的一个子标签里面的文本内容!!!!!
38
}else if("name".equals(tag)){
39
cat.setName(parser.nextText());
40
}
41
break;
42
case XmlPullParser.END_TAG://类似于SAX解析的endElement()
43
if("cat".equals(tag)){//如果遇到了对象结束标签</cat>,说明cat对象属性已经组装完毕,可以加入list
44
list.add(cat);
45
}
46
break;
47
default:
48
break;
49
}
50
//千万别忘了:最后要
51
eventType = parser.next();//获取下一次的事件类型,否则会陷入死循环.
52
}
53
//while循环结束了
54
for(Cat c:list){
55
System.out.println(c);
56
}
57
}
58
59
}
3月份(单行属性解析)
1
2
- <year>
3
<month id="1" shop="myshop" price="8000.00">1</month>
4
<month id="2" shop="myshop" price="9000.00">2</month>
5
<month id="3" shop="myshop" price="7000.00">3</month>
6
<month id="4" shop="myshop" price="8000.00">4</month>
7
<month id="5" shop="myshop" price="7800.00">5</month>
8
<month id="6" shop="myshop" price="7800.00">6</month>
9
<month id="7" shop="myshop" price="7900.00">7</month>
10
<month id="8" shop="myshop" price="7900.00">8</month>
11
<month id="9" shop="myshop" price="7000.00">9</month>
12
<month id="10" shop="myshop" price="7800.00">10</month>
13
<month id="11" shop="myshop" price="11000.00">11</month>
14
<month id="12" shop="myshop" price="4500.00">12</month>
15
</year>
代码
1
/**用pull解析单行元素(对象根标签中没有子标签)
2
* @author Administrator
3
*
4
*/
5
public class Demo03Month {
6
public static void main(String[] args) throws Exception {
7
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
8
XmlPullParser parser = factory.newPullParser();
9
parser.setInput(new FileReader("month.xml"));
10
int eventType = parser.getEventType();
11
List<Month> list = null;
12
Month month = null;
13
outer:
14
while(eventType != XmlPullParser.END_DOCUMENT){
15
String tag = parser.getName();
16
switch (eventType) {
17
case XmlPullParser.START_DOCUMENT://遇到文档开始标签,会自动执行,不用判断tag
18
list = new ArrayList<Month>();
19
break;
20
case XmlPullParser.START_TAG:
21
if("month".equals(tag)){
22
month = new Month();
23
String idValue = parser.getAttributeValue(0);
24
String shopValue = parser.getAttributeValue(1);
25
String priceValue = parser.getAttributeValue(2);
26
month.setId(idValue);
27
month.setShop(shopValue);
28
month.setPrice(Double.parseDouble(priceValue));
29
}
30
break;
31
case XmlPullParser.END_TAG:
32
if("month".equals(tag)){
33
list.add(month);
34
if("5".equals(month.getMonthValue())){//只想获取前5个月的数据,装入list
35
break outer;
36
}
37
}
38
break;
39
case XmlPullParser.TEXT://处理单行对象的文本节点的分支
40
String text = parser.getText();//注意不是nextText()!
41
text = text.trim();//去掉首尾空白
42
if(text.length() != 0){//如果文本是有内容的
43
month.setMonthValue(text);
44
}
45
break;
46
47
default:
48
break;
49
}
50
eventType = parser.next();
51
}//while结束
52
for(Month m:list){
53
System.out.println(m);
54
}
55
}
56
}
1
public class Month {
2
//<month id="1" shop="myshop" price="8000.00">1</month>
3
private String id;
4
private String shop;
5
private double price;
6
private String monthValue;//自己随便定义的名字,用于对应"1"文本节点
7
8
public String toString() {
9
return "Month [id=" + id + ", shop=" + shop + ", price=" + price + ", monthValue=" + monthValue + "]";
10
}
11
public String getId() {
12
return id;
13
}
14
public void setId(String id) {
15
this.id = id;
16
}
17
public String getShop() {
18
return shop;
19
}
20
public void setShop(String shop) {
21
this.shop = shop;
22
}
23
public double getPrice() {
24
return price;
25
}
26
public void setPrice(double price) {
27
this.price = price;
28
}
29
public String getMonthValue() {
30
return monthValue;
31
}
32
public void setMonthValue(String monthValue) {
33
this.monthValue = monthValue;
34
}
35
36
}
阅读全文
0 0
- Xml解析之----Pull
- XML解析之PULL
- xml解析之pull
- XML之PULL解析
- XML之PULL解析
- xml解析之pull
- XML之pull解析
- xml解析之PULL
- Xml之pull解析
- xml之pull解析
- Xml之pull解析
- XML解析之pull
- XML解析之PULL
- Xml之Pull解析
- xml解析之pull解析
- xml解析之pull解析
- Xml 解析之pull解析
- XML解析之pull解析
- 0-1背包问题
- Androidstudio 导入mode 报错:"Manifest merger failed with multiple errors, see logs"
- mybatis查询时间段sql语句
- 个人笔记 github
- java 根据日期计算星期几
- Xml之Pull解析
- 使用Snapdragon Profiler工具分析Dragonboard410c(二)
- Java Swing中菜单栏、弹出式菜单、树形控件的使用
- 理解RESTful架构-转载自阮一峰的网络日志
- Android 屏幕适配攻略(四)获取手机屏幕的相关信息 与动态设置控件的大小
- 不可模数
- php7.0项目在本地完美运行上传至服务器手机app不显示数据
- app开发中的异步处理(四)
- 自动行为操控Steering(四)—到达(单体操控)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
志锐
锐普
普锐斯汽车
厦门海普锐科技股份有限公司
锐普净水器
锐普论坛
锐普ppt大赛
锐普ppt论坛
锐普ppt
瑞普ppt
锐智
智锐科技
国泰君安锐智版下载
国泰君安锐智版
锐哦
锐欧
起亚锐欧
锐欧4s店
锐欧 2007款 1.4l 自动 标准型
rio锐欧价格
二手锐欧多少钱
锐欧 空调
锐欧怎么样
锐欧新款
锐欧内饰图片
起亚锐欧rio
锐欧脚垫
锐欧2015款
锐欧发动机故障灯亮
悦达起亚rio锐欧
锐欧座套
锐欧科技
2015锐欧
起亚锐欧图片
新款锐欧
起亚rio锐欧价格
起亚锐欧汽车配件
二手起亚锐欧多少钱
起亚锐欧怎么样
锐欧1.4油耗
二手锐欧价格