1小猫(标签中不带属性信息)
1
<?xml version="1.0" encoding="UTF-8" ?>
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
@Override
17
public String toString() {
18
return "Cat [id=" + id + ", name=" + name + "]";
19
}
20
21
}
2第二只小猫咪(标签中带属性信息)
1
<?xml version="1.0" encoding="UTF-8" ?>
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
<?xml version="1.0" encoding="UTF-8" ?>
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
@Override
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
}