編輯:關於Android編程
在android開發中,經常用到去解析xml文件。我們今天來學習一下XML文件的解析,在java中我們應該知道兩種解析方式:DOM和SAX解析方式,我這裡就不講解DOM和SAX的解析方式了,有興趣的同學可以向我要示例或者自己上網查查,這裡重點講解一下Android中常用並且官方推薦的方式:
PULL解析方式
PULL解析方式采用事件驅動進行解析的,當pull解析器,開始解析之後,我們可以調用它的next()方法,來獲取下一個解析事件(就是開始文檔,結束文檔,開始標簽,結束標簽),當處於某個元素時可以調用XmlPullParser的getAttributte()方法來獲取屬性的值,也可調用它的nextText()獲取本節點的值。
步驟:
①拿到加載資源文件XML的解析器
②通過解析器獲得事件類型
③根據事件類型判斷並獲取相應的值
那來做下吧,
准備了一個簡單的xml文件:
movie.xml
憤怒的小鳥
animation
English
葉問
action
chinese
在res/目錄下新建一個文件夾xml,將此xml文件放進去。
可以看到最外層的節點 Movies 中包含兩個 Movie ,而每個 Movie 中又包含三個屬性:name 、type 、language
所以我們可以新建一個Movie 類來保存解析出來的每個 Movie , Movie中應該有四個屬性 id 、name 、type 、language
Movie.java
public class Movie {
private String id; //id
private String name; //電影名
private String type; //電影類型
private String language;//語言
public Movie() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
@Override
public String toString() {
return "Movie [id=" + id + ", name=" + name + ", type=" + type
+ ", language=" + language + "]";
}
}
布局文件:
activity_main.xml
MainActivity.java
public class MainActivity extends Activity {
private TextView show;
private Movie movie;
private List movieList; //存放電影的集合
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show = (TextView) findViewById(R.id.show);
}
/*
* 這是一個按鈕的點擊事件
*
* 在這裡用pull方式來解析xml文件
*/
public void pull(View view) {
//從xml資源文件夾加載movie.xml文件
XmlResourceParser XmlParser = getResources().getXml(R.xml.movie);
// 拿到第一個事件類型,事件類型為END_DOCUMENT,START_DOCUMENT,START_TAG,END_TAG等
try {
int type = XmlParser.getEventType();
while (type != XmlResourceParser.END_DOCUMENT) { //結束節點(即),只要不是結束節點就遍歷
switch (type) {
case XmlResourceParser.START_DOCUMENT: //開始節點(即 )
System.out.println("開始解析");
movieList = new ArrayList();
break;
case XmlResourceParser.START_TAG:
if ("Movie".equals(XmlParser.getName())) { //開始元素()
//getAttributeValue獲得Movie節點的屬性
movie = new Movie();
movie.setId(XmlParser.getAttributeValue(null, "id"));
}
if ("name".equals(XmlParser.getName())) { //開始子元素()
/// 通過nextText()就可以獲得子節點的文本的值
movie.setName(XmlParser.nextText());
}
if ("type".equals(XmlParser.getName())) { //開始子元素()
/// 通過nextText()就可以獲得子節點的文本的值
movie.setType(XmlParser.nextText());
}
if ("language".equals(XmlParser.getName())) { //開始子元素()
/// 通過nextText()就可以獲得子節點的文本的值
movie.setLanguage(XmlParser.nextText());
}
break;
case XmlResourceParser.END_TAG:
if ("Movie".equals(XmlParser.getName())) { //結束元素( )
movieList.add(movie);
movie = null;
}
break;
default:
break;
}
//獲取下一個解析事件((即開始文檔,結束文檔,開始標簽,結束標簽))
type = XmlParser.next();
}
} catch (IOException e) {
e.printStackTrace();
}
catch (XmlPullParserException e) {
e.printStackTrace();
}
//解析結束,將結果顯示在TextView上
show.setText(movieList.toString());
}
}
大家看看注釋,應該很清楚。當然,除以上三種外還有很多解析xml的方法,比如DOM4J、JDOM等等。但其基本的解析方式包含兩種,一種是事件驅動的(代表SAX),另一種方式是基於文檔結構(代表DOM)。其他的只不過語法不一樣而已。
結果:
我覺得應用程序需要處理最多的就是用戶動作,也就是需要為用戶動作提供響應,這種為用戶動作提供響應的機制就是事件處理。Android提供了兩套事件處理機制:基於監聽的事件處理
仿映客送小禮物的特效,順便復習一下屬性動畫,話不多說先看效果圖。需求分析可以看到整個動畫有幾部分組成,那我們就把每個部分拆分出來各個擊破。1.要顯示那些內容以及內容間的位
Android Studio中有一個被叫矢量工具(Vector Asset Studio)它能幫助我們增加多種圖標和導入可以拉伸的矢量圖形文件作為矢量資源圖片在項目中。利
這應該是目前最詳細的一篇講解Matrix的中文文章了,在上一篇文章Matrix原理中,我們對Matrix做了一個簡單的了解,偏向理論,在本文中則會詳細的講解Matrix的