SAX(Simple API for XML),是指一种接口,或者一个软件包。
DOM:文档驱动。DOM在解析文件之前把整个文档装入内存,处理大型文件时其性能很差,是由于DOM的树结构所造成的,此结构占用的内存较多。
SAX:事件驱动型的XML解析方式。顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问,且是只读的。
由于移动设备的内存资源有限,SAX的顺序读取方式更适合移动开发。
SAX解析XML步骤
①创建XML解析处理器。
②创建SAX解析器。
③将XML解析处理器分配给解析器。
④对文档进行解析,将每个事件发送给处理器。
下面是SAX解析XML文件的代码程序,完整代码下载地址:android_sax.rar
MainActivity:
- /**
- *MainActivity
- *
- *@authorzuolongsnail
- */
- publicclassMainActivityextendsActivity{
- privateButtonparseBtn;
- privateListViewlistView;
- privateArrayAdapter<Person>adapter;
- privateArrayList<Person>persons;
- @Override
- voidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- parseBtn=(Button)findViewById(R.id.parse);
- listView=(ListView)findViewById(R.id.list);
- parseBtn.setonClickListener(newOnClickListener(){
- @Override
- voidonClick(Viewv){
- persons=MainActivity.this.readxml();
- adapter=newArrayAdapter<Person>(MainActivity.this,
- android.R.layout.simple_expandable_list_item_1,persons);
- listView.setAdapter(adapter);
- }
- });
- privateArrayList<Person>readxml(){
- InputStreamfile=this.getClass().getClassLoader()
- .getResourceAsstream("persons.xml");
- //①创建XML解析处理器
- SAXXmlContentHandlercontentHandler=newSAXXmlContentHandler();
- try{
- //创建一个SAXParserFactory
- SAXParserFactoryfactory=SAXParserFactory.newInstance();
- //②创建SAX解析器
- SAXParserparser=factory.newSAXParser();
- //③将XML解析处理器分配给解析器
- //④对文档进行解析,将每个事件发送给处理器。
- parser.parse(file,contentHandler);
- file.close();
- }catch(Exceptione){
- e.printstacktrace();
- }
- returncontentHandler.getBooks();
- }
XML解析处理器:
copy