使用PULL解析XML檔案

來源:互聯網
上載者:User

        XmlPull和Sax類似,是基於流(stream)操作檔案,然後根據節時間點事件回調開發人員編寫的處理常式。因為是基於流的處理,因此Xmlpull和 Sax都比較節約記憶體資源,不會象Dom那樣要把所有節點以對橡樹的形式展現在記憶體中。 但Xmlpull比Sax更簡明,而且不需要掃描完整個流。

     下面來看一個pull解析xml的例子:

      student.xml:

     

<?xml version="1.0" encoding="utf-8"?>      <root>          <student id="1" group="1">              <name>張三</name>              <sex>男</sex>              <age>18</age>              <email>zhangsan@163.com</email>              <birthday>1987-06-08</birthday>              <memo>好學生</memo>          </student>          <student id="2" group="2">              <name>李四</name>              <sex>女</sex>              <age>18</age>              <email>lisi@163.com</email>              <birthday>1987-06-08</birthday>              <memo>好學生</memo>          </student>          <student id="3" group="3">              <name>小王</name>              <sex>男</sex>              <age>18</age>              <email>xiaowang@163.com</email>              <birthday>1987-06-08</birthday>              <memo>好學生</memo>          </student>          <student id="4" group="4">              <name>小張</name>              <sex>男</sex>              <age>18</age>              <email>xiaozhang@163.com</email>              <birthday>1987-06-08</birthday>              <memo>好學生</memo>          </student>          <student id="5" group="5">              <name>小明</name>              <sex>男</sex>              <age>18</age>              <email>xiaoming@163.com</email>              <birthday>1987-06-08</birthday>              <memo>好學生</memo>          </student>      </root>  

       對應的bean:

    

public class Student {          private int id;      private int group;      private String name;      private String sex;      private int age;      private String email;      private String memo;      private String birthday;      public int getId() {          return id;      }      public void setId(int id) {          this.id = id;      }      public int getGroup() {          return group;      }      public void setGroup(int group) {          this.group = group;      }      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public String getSex() {          return sex;      }      public void setSex(String sex) {          this.sex = sex;      }      public int getAge() {          return age;      }      public void setAge(int age) {          this.age = age;      }      public String getEmail() {          return email;      }      public void setEmail(String email) {          this.email = email;      }      public String getMemo() {          return memo;      }      public void setMemo(String memo) {          this.memo = memo;      }      public String getBirthday() {          return birthday;      }      public void setBirthday(String birthday) {          this.birthday = birthday;      }        }  

    主要的解析和現實類:

  

import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserFactory;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.ViewGroup.LayoutParams;import android.widget.LinearLayout;import android.widget.TextView;public class PullActivity extends Activity implements Runnable{private TextView pullTextView ;private LinearLayout layout;private Handler handler=new Handler(){ public void handleMessage(android.os.Message msg) { List<Student> lists=(List<Student>) msg.obj; for(int i=0;i<lists.size();i++){ Student student=lists.get(i); StringBuffer sb=new StringBuffer(); sb.append(student.getId()+"  ").append(student.getName()+"  ") .append(student.getAge()+"  ").append(student.getSex()+" ").append(student.getBirthday()+"  ") .append(student.getEmail()+"  ").append(student.getGroup()+"  "); TextView txt=new TextView(getApplicationContext()); txt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); txt.setText(sb.toString()); layout.addView(txt); } };};@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.pull);pullTextView=(TextView) this.findViewById(R.id.pullTextView);layout=(LinearLayout) this.findViewById(R.id.layout);new Thread(this).start();  }//pull解析xmlpublic List<Student> pullParseXml(){List<Student> lists=null;Student student=null;try {XmlPullParserFactory factory=XmlPullParserFactory.newInstance();//擷取XmlPullParser執行個體XmlPullParser pullParser=factory.newPullParser();InputStream in=this.getClass().getClassLoader().getResourceAsStream("student.xml");pullParser.setInput(in, "UTF-8");//開始int eventType=pullParser.getEventType();while(eventType!=XmlPullParser.END_DOCUMENT){String nodeName=pullParser.getName();switch (eventType) {//文檔開始case XmlPullParser.START_DOCUMENT: lists=new ArrayList<Student>();break;//開始節點case XmlPullParser.START_TAG:if("student".equals(nodeName)){student=new Student();student.setId(Integer.parseInt(pullParser.getAttributeValue(0)));student.setGroup(Integer.parseInt(pullParser.getAttributeValue(1)));}else if("name".equals(nodeName)){student.setName(pullParser.nextText());}else if("sex".equals(nodeName)){student.setSex(pullParser.nextText());}else if("age".equals(nodeName)){student.setAge(Integer.parseInt(pullParser.nextText()));}else if("email".equals(nodeName)){student.setEmail(pullParser.nextText());}else if("birthday".equals(nodeName)){student.setBirthday(pullParser.nextText());}else if("memo".equals(nodeName)){student.setMemo(pullParser.nextText());}break;//結束節點case XmlPullParser.END_TAG:if("student".equals(nodeName)){lists.add(student);student=null;}break;default:break;} // 手動的觸發下一個事件  eventType=pullParser.next();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return lists;}@Overridepublic void run() {// TODO Auto-generated method stubList<Student> lists=pullParseXml();Message msg=handler.obtainMessage();msg.obj=lists;handler.sendMessage(msg);}}

      注意xml中的<?xml version="1.0" encoding="utf-8"?>  這句話要頂格顯示,不要留空隙,附則錯了很難調試的。

     解析後效果:

   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.