1. SAX
SAX, 即Simple API for XML的缩写,是一种事件驱动的用于解析XML的API。解析器是XMLReader,事件处理器是ContentHandler接口。
2. 实例说明
下面是一个包含人员信息的XML,需要完成的功能是用SAX解析人员信息,然后在Android App中用ListView显示。
实现步骤如下:
1)实现自己的事件处理器类SAXParseHandler,向外提供接口getData(),返回解析后的数据
1 package com.example.saxdemo.sax; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import org.xml.sax.Attributes; 9 import org.xml.sax.SAXException;10 import org.xml.sax.helpers.DefaultHandler;11 12 public class SAXParseHandler extends DefaultHandler {13 14 List
2) 在Activity中实现解析XML并得到ListView需要的数据的接口
步骤:实例化一个SAXParseFactory --> 实例化SAXParser对象 --> 实例化事件处理器 --> 为XMLReader解析器注册一个事件处理器 --> 获取需要解析的XML文件的文件流 --> 开始解析XMLReader.parse()1 List> getData() throws ParserConfigurationException, SAXException, IOException{ 2 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 3 SAXParser saxParser = saxParserFactory.newSAXParser(); 4 XMLReader xmlReader = saxParser.getXMLReader(); 5 SAXParseHandler saxParseHandler = new SAXParseHandler(); 6 xmlReader.setContentHandler(saxParseHandler); 7 8 InputStream inputStream = getResources().openRawResource(R.raw.persons); 9 xmlReader.parse(new InputSource(inputStream));10 return saxParseHandler.getData();11 }
3) 用SimpleAdapter装载ListView
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 6 parseBtn = (Button) findViewById(R.id.button1); 7 listView = (ListView) findViewById(R.id.listView1); 8 9 parseBtn.setOnClickListener(new OnClickListener() {10 11 @Override12 public void onClick(View v) {13 // TODO Auto-generated method stub14 SimpleAdapter adapter = null;15 try {16 adapter = new SimpleAdapter(MainActivity.this, getData(), R.layout.person,17 new String[]{"name", "id"}, 18 new int[]{R.id.person_name, R.id.person_id});19 listView.setAdapter(adapter);20 } catch (ParserConfigurationException e) {21 // TODO Auto-generated catch block22 e.printStackTrace();23 } catch (SAXException e) {24 // TODO Auto-generated catch block25 e.printStackTrace();26 } catch (IOException e) {27 // TODO Auto-generated catch block28 e.printStackTrace();29 }30 }31 });32 }
3. 运行效果
点击"Parse By SAX" 按钮时,会把XML中的数据显示到ListView上。