kowala's home

kowala's home
這裡是我的學習筆記,陸續增加中。
http://kowala21.blogspot.com

2011-05-06

android xml parser 如何從網路下載XML並解析

在 Android 中,要使用到網路功能的話,必須在 manifest 檔中開放權限,
加入下列設定於manifest 中

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

可以自己 key in ,也可以使用 eclipse 的內建編輯器來輸入,如下圖



這樣就可以在程式中使用網路功能了。

接著討論 XML 的解析 (Parser)
中研院有個網站提供一系列 xml 供人測試
中研院測試資源網站 http://xml.ascc.net/test/zh/big5/index.html
先來看看...



在 UTF-8 欄中,隨便挑一個 XML 滑鼠右鍵複製鏈結,就有 XML 網址了

http://xml.ascc.net/test/wf/utf-8/application_xml/zh-utf8-12.xml

XML 內容如下

<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 1998 Academia Sinica Computing Center -->
<!-- Permission to use and distribute granted under MPL -->
<!-- Email corrections to ricko@gate.sinica.net.tw -->
<test type="io12">
        <name id="中">Chinese Test #12: UTF-8</name>
        <data>This file has two attributes
        with Chinese characters, directly entered.
        This tests Native Language Markup (NLM).
        </data>
        <data>The XML header of this file is
        &lt;?xml encoding="UTF-8"?&gt;.
        </data>
        <data refid="中">(In the DOCTYPE test, the
        name element has an ID attribute, and this
        element has an IDREF attribute.)</data>

</test>

現在開始進入程式部份了

//建立連線
try {
    String xml="http://xml.ascc.net/test/wf/utf-8/application_xml/zh-utf8-12.xml";
    URL url = new URL(xml);
    InputStream is = url.openStream();
    int eventType;
    StringBuffer strBuf = new StringBuffer();
    String strNode=null;
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser xpParser = factory.newPullParser();
    xpParser.setInput(is,"utf-8");
    eventType = xpParser.next();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if(eventType == XmlPullParser.START_DOCUMENT){
                    strBuf.append("--- XML START_DOCUMENT ---");
        }else if(eventType == XmlPullParser.START_TAG) {               
                    strNode = xpParser.getName();
                    strBuf.append("\nSTART_TAG: "+strNode);
        }else if(eventType == XmlPullParser.TEXT){   
                    strNode = xpParser.getText();
                    strBuf.append("\nTEXT: "+strNode);
        }else if(eventType == XmlPullParser.END_TAG){
                    strNode = xpParser.getName();
                    strBuf.append("\nEND_TAG: "+strNode);
        }
    }
    eventType = xpParser.next();
} catch (MalformedURLException e) {
}...

這樣就把 XML 讀入 strBuf 之中了,接著把它秀出來

TextView txt1 = (TextView) findViewById(R.id.textView1);
txt1.setText(strBuf.toString());