• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 通過XmlPullParser解析XML

    標簽: Android

    此文,僅做為個人學習Android,記錄成長以及方便復習!

    1.通過Myeclipse搭建一個服務器環境,存放一個XML文件

    2.訪問地址:http://192.168.0.109:8080/JsonDemo/Text.xml

    內容如下:


    接下來開始正真的表演了!

    創建一個類,存放每個<penson>的內容

    penson.xml

    package com.rui.xmldemo;
    
    /**
     * Created by qqazl001 on 2018/4/24.
     */
    
    public class Penson {
        private String name;
        private String age;
        private String mian;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getMian() {
            return mian;
        }
    
        public void setMian(String mian) {
            this.mian = mian;
        }
    
        @Override
        public String toString() {
            return "Penson{" +
                    "name='" + name + '\'' +
                    ", age='" + age + '\'' +
                    ", mian='" + mian + '\'' +
                    '}';
        }
    }
    

    創建一個類繼承線程,變身牛逼的線程類

    通過XmlPullParser解析XML內容并顯示在TextView

    package com.rui.xmldemo;
    
    import android.os.Handler;
    import android.widget.TextView;
    
    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlPullParserException;
    import org.xmlpull.v1.XmlPullParserFactory;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
    
    
    /**
     * Created by qqazl001 on 2018/4/25.
     */
    
    public class XmlFromUrl extends Thread{
        private String url;
        private Handler handler;
        private TextView textView;
    
        public XmlFromUrl(String url,Handler handler,TextView textView){
            this.url = url;
            this.handler = handler;
            this.textView = textView;
        }
        @Override
        public void run() {
            super.run();
            try {
                //解析URL為輸入流
                URL httpUrl = new URL(url);
                HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
                conn.setRequestMethod("GET");
                conn.setReadTimeout(5000);
                InputStream is = conn.getInputStream();
               //pull解析基于事件驅動
                //獲取工程對象
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                //實例化工廠對象
                XmlPullParser parser = factory.newPullParser();
                //添加輸入流,并設置編碼
                parser.setInput(is,"UTF-8");
                //獲取事件類型
                int event = parser.getEventType();
                //設置集合存放<penson>標簽下的penson
                final List<Penson> list  = new ArrayList<Penson>();
                Penson penson = null;
                //根據事件類型處理
                //文檔結束位置END_DOCUMENT
                while(event!=XmlPullParser.END_DOCUMENT){
                    //獲取標簽名
                    String data = parser.getName();
                    //根據事件類型判斷處理
                    switch(event){
                        case XmlPullParser.START_TAG:
                            //如果是起始標簽<penson>則實例化
                            if("penson".equals(data)){
                                penson = new Penson();
                            }
                            //如果是<penson>下的標簽則賦值
                            if("name".equals(data)){
                                penson.setName(parser.nextText());
                            }
                            if("age".equals(data)){
                                penson.setAge(parser.nextText());
                            }
                            if("main".equals(data)){
                                penson.setMian(parser.nextText());
                            }
                            break;
                        case XmlPullParser.END_TAG:
                            //遇到結束標簽則把penson添加到list
                            if("penson".equals(data)){
                                list.add(penson);
                            }
                            break;
                    }
                    //開始下一次循環
                    event = parser.next();
                }
                //list內容顯示到文本
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText(list.toString());
                    }
                });
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }
    }
    

    最后當然得到Maintivity.java 去調用我們的線程類才能功德圓滿了

    package com.rui.xmldemo;
    
    import android.os.Handler;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        private TextView tv;
        private Handler handler = new Handler();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv = findViewById(R.id.tv1);
            String url = "http://192.168.0.109:8080/JsonDemo/Text.xml";
              XmlFromUrl xmlFromUrl = new XmlFromUrl(url,handler,tv);
              xmlFromUrl.start();
        }
    }
    

    版權聲明:本文為qqazl001原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qqazl001/article/details/80078666

    智能推薦

    XML解析

    1. Java中配置文件的三種配置位置及讀取方式 1.1.讀取同級目錄下的配置文件 1.2.讀取項目根路徑下的配置文件 輸出 1.3.WEB-INF(或其子目錄下)寫一個servlet 輸出 3. dom4j+xpath解析xml文件 進行dom4j解析XML文件的時候需要導入以下包 案例 輸出...

    XML解析

    一、dom方法  文檔對象模型,方法擅長小規模的讀和寫 處理方式是將整個的xml作為一個樹結構的方法是讀入內存來操作和解析,解析大量數據文件時會遇到內存泄漏及程序崩潰的風險。 dom寫方法: 1.先通過此方法創建一個document節點 2.通過創建節點 Element docx = document.createElement("document");、創建屬性do...

    XML解析

    什么是xml文件?筆者認為語言描述往往是晦澀的,有時候非但不能達到某種效果,反而令人生畏。不如我們先直接給出一個xml文件。 xml文件有兩種書寫方式(用標簽和用屬性),這里我們推薦用屬性。 對xml文件的解析可以實現對xml文件的增刪改查,這篇博文只實現了對xml的”查“功能。 為了輸出的美觀,給出一個StudentInfo類 再給出真正用來解析xml文件的類 執行結果 ...

    XML解析

    XML文件解析 首先我以“學生信息”舉例,給一個xml文件的代碼: student.tag.xml 再給另一個xml文件: student.att.xml 前一種著重使用標簽,第二種方式綜合屬性和標簽。這兩種都可以表達學生信息,沒有哪種是標準方式。 分別給出兩個xml文件的解析類: TestParseTag.java TestParseAttribute.java 觀察上面...

    Xml解析

    Android基礎——XML數據的三種解析方式 本篇文章包含以下內容: XML數據的Dom解析 XML數據的Sax解析 XML數據的Pull解析 Activity中使用三種解析 Sax解析與Pull解析區別 三種解析方式的步驟: 在Assets文件夾中模擬創建XML數據 創建對應XML的Bean對象 開始解析 XML數據的Dom解析 DOM解析XML文件時,會將XML文件的...

    猜你喜歡

    xml解析

    JAXB 1.@XmlRootElement,用于類級別的注解,對應xml的跟元素。通過name屬性定義這個根節點的名稱。 2.@XmlAccessorType,定義映射這個類中的何種類型都需要映射到xml。(如果不存在@XmlAccessorType,默認使用XmlAccessType.PUBLIC_MEMBER注解)   參數:XmlAccessType.FIELD: java對象中的所有成員...

    xml解析

    DOM解析原理及結構模型: DOM中的核心概念就是節點,在XML文檔中的元素、屬性、文本等,在DOM中都是節點! 具體Demo: beans.xml內容是: 輸出:...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡