歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用SAX解析XML文件

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();
 }
}

Copyright © Linux教程網 All Rights Reserved