需要做一个银行名字的列表。
因为有很多,所以想到了用xml来保存,然后uongDAX解析。
public class BankSelectActivity extends BaseActivity{ private List list;//存放搜索结果 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.citylist); doMyMission(); } /** * 使用SAX解析器解析XML文件的方法 */ private void doMyMission() { try { //获取AssetManager管理器对象 AssetManager as = getAssets(); //通过AssetManager的open方法获取到banks.xml文件的输入流 InputStream is = as.open("banks_num.xml"); //通过获取到的InputStream来得到InputSource实例 InputSource is2 = new InputSource(is); //使用工厂方法初始化SAXParserFactory变量spf SAXParserFactory spf = SAXParserFactory.newInstance(); //通过SAXParserFactory得到SAXParser的实例 SAXParser sp = spf.newSAXParser(); //通过SAXParser得到XMLReader的实例 XMLReader xr = sp.getXMLReader(); //初始化自定义的类MySaxHandler的变量msh,将beautyList传递给它,以便装载数据 BankNumHandler msh = new BankNumHandler(list); //将对象msh传递给xr xr.setContentHandler(msh); //调用xr的parse方法解析输入流 xr.parse(is2); } catch (Exception e) { e.printStackTrace(); } } class BankNumHandler extends DefaultHandler { private List mList; //声明一个字符串变量 private String content; private String key; public BankNumHandler(List list) { this.mList = list; } /** * 当SAX解析器解析到某个属性值时,会调用的方法 * 其中参数ch记录了这个属性值的内容 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); content = new String(ch, start, length); } /** * 当SAX解析器解析到某个元素结束时,会调用的方法 * 其中localName记录的是元素属性名 */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if ("key".equals(localName)) { key = content; } else if ("integer".equals(localName)) { if (key.equals(mList.get(0))) { mList.add(content); netDialog.dismiss(); } } } } }
部分xml文件的内容:
<dict> <key>上海银行</key> <integer>xxxxxx</integer> <key>上饶银行</key> <integer>xxxxxx</integer> <key>东莞银行</key> <integer>xxxxxx</integer> </dict>
当调用
doMyMission()方法结束后,list中就保存了xml文件里的所有值。