Xml之Pull解析

来源:互联网 发布:java工厂设计模式原理 编辑:程序博客网 时间:2024/05/16 06:47
1小猫(标签中不带属性信息)
代码
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
}
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>
代码
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
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
}