XML DOM解析

DOM解析XML文件時,會將XML文件的全部內容讀取到內存中,而後使用DOM API遍歷XML數、檢索所須要的數據。使用DOM操做XML比較直觀,而且在某些方面比基於SAX的實現更加簡單。可是由於DOM須要將XML文件的全部內容讀取到內存,因此內存的消耗比較大,特別對於運行Android的移動設備來講,由於設備的資源比較寶貴,因此建議仍是採用SAX來解析XML文件,固然,若是XML的文件內容較小,採用DOM也是可行的。java

main.xmlandroid

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- 添加一個按鈕 -->

    <Button
        android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GO!" />
    <!-- 添加一個文本框,用於顯示結果 -->

    <TextView
        android:id="@+id/show"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="" />

</LinearLayout>

 

DOMXMLActivity.javaapp

package com.supermario.domxml;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DomXMLActivity extends Activity {
    // 新建一個按鈕用於響應用戶按鍵
    private Button start;
    // 新建一個TextView用於存放結果
    private TextView show;
    // Assets中的xml文件名稱
    private String fileName = "fruit.xml";
    InputStream inStream = null;

    /** 首次建立界面時運行 */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show = (TextView) findViewById(R.id.show);
        start = (Button) findViewById(R.id.start);

        try {
            // 從Assets中獲取文件
            inStream = this.getAssets().open(fileName);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 爲按鍵綁定事件
        start.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // 用於存放結果字符串
                String result = "";
                // 解析字符流
                result = parse(inStream);
                // 將結果顯示到界面上
                show.setText(result);
            }
        });
    }

    // 解析字符流
    public String parse(InputStream inStream) {
        String result = "";
        // 實例化一個DocumentBuilderFactory類
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null; Document doc = null;
        try {
            // 實例化一個DocumentBuilder用於解析字符流
            builder = dbf.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            // 解析字符流
            doc = builder.parse(inStream);
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Element ele = doc.getDocumentElement();
        // 獲取全部的「fruit」節點
         NodeList nl = ele.getElementsByTagName("fruit");
        if (nl != null && nl.getLength() != 0) {
            for (int i = 0; i < nl.getLength(); i++) {
              Element entry = (Element) nl.item(i);
                // 用於獲取屬性
                result += "name:" + entry.getAttribute("name") + "-->";
                // 用於獲取文本內容
                result += entry.getTextContent() + "\n";
            }
        }
        return result;
    }
}

Fruit.xmldom

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <fruit id="1" name="apple">
        <fruit id="01" name="grap">10yuan</fruit>
    </fruit>
    <fruit id="2" name="banana">3yuan
    </fruit>
    <fruit id="3" name="pear" />

</resources>

輸出結果:ide

name:apple-->
        10yuan
   
name:grap-->10yuan
name:banana-->3yuan
   
name:pear--> ui

相關文章
相關標籤/搜索