SAX(Simple API for XML),是指一種接口,或者一個軟件包。
DOM:文檔驅動。DOM在解析文件之前把整個文檔裝入內存,處理大型文件時其性能很差,是由於DOM的樹結構所造成的,此結構占用的內存較多。
SAX:事件驅動型的XML解析方式。順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問,且是只讀的。
由於移動設備的內存資源有限,SAX的順序讀取方式更適合移動開發。
SAX解析XML步驟
①創建XML解析處理器。
②創建SAX解析器。
③將XML解析處理器分配給解析器。
④對文檔進行解析,將每個事件發送給處理器。
下面是SAX解析XML文件的代碼程序,Android_sax完整代碼下載地址:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2013年資料/2月/17日/使用SAX解析XML文件
MainActivity:
/**
* MainActivity
*
* @author zuolongsnail
*
*/
public class MainActivity extends Activity {
private Button parseBtn;
private ListView listView;
private ArrayAdapter<Person> adapter;
private ArrayList<Person> persons;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
parseBtn = (Button) findViewById(R.id.parse);
listView = (ListView) findViewById(R.id.list);
parseBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
persons = MainActivity.this.readXml();
adapter = new ArrayAdapter<Person>(MainActivity.this,
android.R.layout.simple_expandable_list_item_1, persons);
listView.setAdapter(adapter);
}
});
}
private ArrayList<Person> readXml() {
InputStream file = this.getClass().getClassLoader()
.getResourceAsStream("persons.xml");
// ①創建XML解析處理器
SAXXmlContentHandler contentHandler = new SAXXmlContentHandler();
try {
// 創建一個SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
// ②創建SAX解析器
SAXParser parser = factory.newSAXParser();
// ③將XML解析處理器分配給解析器
// ④對文檔進行解析,將每個事件發送給處理器。
parser.parse(file, contentHandler);
file.close();
} catch (Exception e) {
e.printStackTrace();
}
return contentHandler.getBooks();
}
}