1. 程式人生 > >XML的三種解析方式與JSON解析方式

XML的三種解析方式與JSON解析方式

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>