XML的三種解析方式與JSON解析方式
阿新 • • 發佈:2019-01-24
XML的三種原生解析方式
DOM,SAX,PULL
DOM:記憶體消耗大 但是便於遍歷.開啟文件,將其轉化為節點樹,然後在其用迴圈的方式,遍歷節點,一一查詢.
SAX:速度快,戰記憶體少.但是檔案結構資訊會丟失,採用的是流的處理方式.從起始標籤開始一一往下逐個查詢.起始標籤與結尾標籤作為標記來將一組資料存入一個集合中,想水流一樣一直到最尾,然後最後返回集合,集合中就存下了所有的資料(這也應該就是所謂的流處理方式吧).
PULL:是Android內建,推薦的一種,相對來說有點類似SAX,也是從上往下,但是它還是已文件開始與結尾為條件,在其中間進行查詢處理,然後分為不同標籤開始逐一查詢.
JSON:輕量級的資料交換格式,比XML小,解析速度快,而且方便,(大括號物件,中括號方法,冒號屬性,直接解析,很簡單粗暴啊),通過json檔案,得到其中的JSON物件與陣列,還有物件中的屬性,對應的解析的時候json物件中的資料是已key-values的形式存在的,非常好理解.
以簡單的PULL程式碼示例
PULL
package com.example.again;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import com.example.again.bean.Book;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
public class PullXmlActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pull_xml);
List<Book>list = pullXmlDate();
for (Book book : list) {
Log.e("--main--" , "Pull"+book.toString());
}
}
private List<Book> pullXmlDate(){
List<Book>list = null;
InputStream inputStream = null;
try {
inputStream = getAssets().open("books.xml");
Book book = null;
//獲取解析器
XmlPullParser parser = Xml.newPullParser();
//設定輸入流和編碼格式
parser.setInput(inputStream, "UTF-8");
//獲取讀取狀態
int type = parser.getEventType();
//不等於文件結束
while(type != XmlPullParser.END_DOCUMENT){
switch (type) {
case XmlPullParser.START_DOCUMENT://文件開始
list = new ArrayList<>();
break;
case XmlPullParser.START_TAG://開始標籤
switch (parser.getName()) {
case "book":
book = new Book();
//獲取屬性值 引數代表屬性下標
book.setDescription(parser.getAttributeName(0));
break;
case "id":
book.setId(Integer.valueOf(parser.nextText()));
break;
case "name":
book.setName(parser.nextText());
break;
case "price":
book.setPrice(Double.valueOf(parser.nextText()));
break;
default:
break;
}
break;
case XmlPullParser.END_TAG://標籤結束
if(parser.getName().equals("book")){
list.add(book);
}
default:
break;
}
//把當前狀態返回給type
type = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(inputStream!=null){
inputStream.close();
inputStream = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
}
book:
package com.example.again.bean;
/**
* @author zq
*
*/
public class Book {
private String description;
private int id;
private String name;
private double price;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [description=" + description + ", id=" + id + ", name=" + name + ", price=" + price
+ "]";
}
}
BOOK.xml:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book description="是基礎中的基礎,必須牢固掌握">
<id>1001</id>
<name>Java基礎教程</name>
<price>80.00</price>
</book>
<book description="學好Android第一步">
<id>1002</id>
<name>Android基礎教程</name>
<price>90.00</price>
</book>
<book description="走向高階程式設計師必經之路">
<id>1003</id>
<name>Android高階教程</name>
<price>100.00</price>
</book>
</books>