Android:Dom解析XML

來源:互聯網
上載者:User

標籤:dom   xml   

     與SAX和PULL解析不同,Dom解析是將XML檔案全部載入,組裝成一顆Dom樹,然後通過節點以及節點之間的關係來解析XML檔案,佔用記憶體比較大,一般比較推薦用SAX和PULL來解析。和前面一樣用同樣的例子來分析一下。

首先自訂一個XML檔案:Student.xml,注意是建立file而不是xml。

<?xml version="1.0" encoding="utf-8"?>  <students>      <student id="1">          <name>張三</name>          <sex>男</sex>          <age>18</age>      </student>      <student id="2">          <name>李四</name>          <sex>女</sex>          <age>19</age>      </student>      <student id="3">          <name>王五</name>          <sex>男</sex>          <age>20</age>      </student>  </students>  
然後建立一個student類

package com.example.xml_sax_demo_1;public class Student {private int id;private String name;private int age;private String sex;public Student() {// TODO Auto-generated constructor stub}public int getId() {return id;}public Student(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ",sex=" + sex+ ", age=" + age + "]";}}
最後在activity裡面通過一個Button來解析資料,其中用到幾個類。

package com.example.xml_sax_demo_1;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;      //注意使用的包都是org.w3c.dom.*的import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubtry {readXML();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}});}private void readXML() throws Exception {List<Student> list = new ArrayList<Student>();InputStream stream = this.getClass().getClassLoader().getResourceAsStream("Student.xml"); // 獲得輸入資料流DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   //一步步下去DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(stream);                       Element element = document.getDocumentElement();                //執行個體化元素     NodeList nodeList = element.getElementsByTagName("student");    //獲得節點名為student的節點列表for (int i = 0; i < nodeList.getLength(); i++) {                Element studentElement = (Element) nodeList.item(i);    //對應上面取得的列表Student student = new Student();                        //每個節點執行個體化一個student元素student.setId(Integer.parseInt(studentElement.getAttribute("id")));  //取得屬性NodeList childNodeList = studentElement.getChildNodes();             //取得子節點列表for (int j = 0; j < childNodeList.getLength(); j++) {                          // if (childNodeList.item(j).getNodeType() == Node.ELEMENT_NODE)// {if (childNodeList.item(j).getNodeName().equals("name")) {      //如果子節點名為name   student.setName(childNodeList.item(j).getFirstChild()  //將文本資料存放區起來.getNodeValue());} else if (childNodeList.item(j).getNodeName().equals("sex")) {student.setSex(childNodeList.item(j).getFirstChild().getNodeValue());} else if (childNodeList.item(j).getNodeName().equals("age")) {student.setAge(Integer.parseInt(childNodeList.item(j).getFirstChild().getNodeValue()));}// }}list.add(student);       //在列表中添加一個student對象                                  }for (Student stu : list) {System.out.println(stu.toString());}}}
結果


小結:從代碼可以看出,Dom解析是將XML檔案全部載入,組裝成一顆Dom樹,然後通過節點以及節點之間的關係來解析XML檔案的,一般是不斷的迴圈遍曆,佔用記憶體比較大。

    

Android:Dom解析XML

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.