通過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();
}
}
智能推薦
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對象中的所有成員...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...