1. 程式人生 > >Android-Xml,PullParser,解析

Android-Xml,PullParser,解析

persons.xml檔案內容: 
這裡寫圖片描述

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><persons>

    <person id="0"><name>zhangsan0</name><age>10</age></person>

    <person id="1"><name>zhangsan1</name><age>11</age></person>

    <
person id="2"><name>zhangsan2</name><age>12</age></person> <person id="3"><name>zhangsan3</name><age>13</age></person> <person id="4"><name>zhangsan4</name><age>14</age></person> <person
id="5"><name>zhangsan5</name><age>15</age></person> <person id="6"><name>zhangsan6</name><age>16</age></person> <person id="7"><name>zhangsan7</name><age>17</age></person> <person id="8"
><name>zhangsan8</name><age>18</age></person> <person id="9"><name>zhangsan9</name><age>19</age></person> <person id="10"><name>zhangsan10</name><age>20</age></person> <person id="11"><name>zhangsan11</name><age>21</age></person> <person id="12"><name>zhangsan12</name><age>22</age></person> <person id="13"><name>zhangsan13</name><age>23</age></person> <person id="14"><name>zhangsan14</name><age>24</age></person> <person id="15"><name>zhangsan15</name><age>25</age></person> <person id="16"><name>zhangsan16</name><age>26</age></person> <person id="17"><name>zhangsan17</name><age>27</age></person> <person id="18"><name>zhangsan18</name><age>28</age></person> <person id="19"><name>zhangsan19</name><age>29</age></person> </persons>

 

點選動作,去解析xml資料,並Log.d打印出來: 
這裡寫圖片描述

 

 


PullParser解析器是基於事件的,有開始文件,結束文件,開始標籤,結束標籤,當事件解析到那個節點的時候,是可以通過pullParser.getName();得到某個具體節點;

 

@Override
    public void onClick(View v) {

        try {
            // 得到Android 提供的Xml解析器 PullParser
            XmlPullParser pullParser = Xml.newPullParser();

            // 指定檔案流物件
            InputStream is = openFileInput("persons.xml");

            // 設定需要解析的檔案流物件
            pullParser.setInput(is, "utf-8");

            // 開始解析

            // 獲取解析事件的型別
            int eventType = pullParser.getEventType();

            List<Person> persons = null;
            Person person = null;

            // 只要沒有解析到文件的結尾,就繼續往下不停的解析
            while(eventType != XmlPullParser.END_DOCUMENT) {

                switch (eventType) {
                    // 節點開始標記<xxx>
                    case XmlPullParser.START_TAG:   
                        // 解析到根節點
                        if (pullParser.getName().equals("persons")) {   
                            persons = new ArrayList<Person>();
                        }
                        // 解析到子節點
                        else if (pullParser.getName().equals("person")) {    
                            person = new Person();
                            // 解析ID屬性
                            // 因為我只有一個屬性,所以是0
                            int id = Integer.parseInt(pullParser.getAttributeValue(0));
                            person.setId(id);
                        }
                        // 解析到子節點的name
                        else if (pullParser.getName().equals("name")) {
                            person.setName(pullParser.nextText());
                        }
                        // 解析到子節點的age
                        else if (pullParser.getName().equals("age")) {
                            person.setAge(Integer.valueOf(pullParser.nextText()));
                        }
                        break;
                    case XmlPullParser.END_TAG:   // 節點結束標記</xxx>
                        // 當解析到</person>就代表解析一個完一個子節點了
                        if (pullParser.getName().equals("person")) {
                            persons.add(person);
                            person = null;
                        }
                        break;
                    default:
                        break;
                }

                // 更新解析的哪裡了
                eventType = pullParser.next();
            }

            // 把解析出來的Xml資料,進行日誌列印
            for (Person p : persons) {
                Log.d(TAG, "解析出來的Xml資料:" + p.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
}

 

Log.d 列印結果:

 

解析出來的Xml資料:Person{id=0, name=’zhangsan0’, age=10}
解析出來的Xml資料:Person{id=1, name=’zhangsan1’, age=11}
解析出來的Xml資料:Person{id=2, name=’zhangsan2’, age=12}
解析出來的Xml資料:Person{id=3, name=’zhangsan3’, age=13}
解析出來的Xml資料:Person{id=4, name=’zhangsan4’, age=14}
解析出來的Xml資料:Person{id=5, name=’zhangsan5’, age=15}
解析出來的Xml資料:Person{id=6, name=’zhangsan6’, age=16}
解析出來的Xml資料:Person{id=7, name=’zhangsan7’, age=17}
解析出來的Xml資料:Person{id=8, name=’zhangsan8’, age=18}
解析出來的Xml資料:Person{id=9, name=’zhangsan9’, age=19}
解析出來的Xml資料:Person{id=10, name=’zhangsan10’, age=20}
解析出來的Xml資料:Person{id=11, name=’zhangsan11’, age=21}
解析出來的Xml資料:Person{id=12, name=’zhangsan12’, age=22}
解析出來的Xml資料:Person{id=13, name=’zhangsan13’, age=23}
解析出來的Xml資料:Person{id=14, name=’zhangsan14’, age=24}
解析出來的Xml資料:Person{id=15, name=’zhangsan15’, age=25}
解析出來的Xml資料:Person{id=16, name=’zhangsan16’, age=26}
解析出來的Xml資料:Person{id=17, name=’zhangsan17’, age=27}
解析出來的Xml資料:Person{id=18, name=’zhangsan18’, age=28}
解析出來的Xml資料:Person{id=19, name=’zhangsan19’, age=29}