有一些固定数据,比如地理位置等,不能存在数据库中,则可以存在assets下的xml中。
格式:
<root> <province name="安徽省"> <city name="安庆市"> <district name="枞阳县" zipcode="246000" /> <district name="大观区" zipcode="246000" /> <district name="怀宁县" zipcode="246000" /> <district name="潜山县" zipcode="246000" /> <district name="宿松县" zipcode="246000" /> <district name="太湖县" zipcode="246000" /> <district name="桐城市" zipcode="246000" /> <district name="望江县" zipcode="246000" /> <district name="宜秀区" zipcode="246000" /> <district name="迎江区" zipcode="246000" /> <district name="岳西县" zipcode="246000" /> <district name="其他" zipcode="246000" /> </city> </province> </root>
解析:
List<ProvinceModel> provinceList = null; AssetManager asset = getAssets(); try { InputStream input = asset.open("province_data.xml"); // 创建一个解析xml的工厂对象 SAXParserFactory spf = SAXParserFactory.newInstance(); // 解析xml SAXParser parser = spf.newSAXParser(); XmlParserHandler handler = new XmlParserHandler(); parser.parse(input, handler); input.close(); // 获取解析出来的数据 provinceList = handler.getDataList(); } catch (Throwable e) { e.printStackTrace(); }
package com.launcher.utils; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import java.util.ArrayList; import java.util.List; public class XmlParserHandler extends DefaultHandler { /** * 存储所有的解析对象 */ private List<CityModel> cityList = new ArrayList<>(); private CityModel cityModel; public XmlParserHandler() {} public List<CityModel> getDataList() { return cityList; } @Override public void startDocument() throws SAXException { // 当读到第一个开始标签的时候,会触发这个方法 } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // 当遇到开始标记的时候,调用这个方法 if (qName.equals("city")) { cityModel = new CityModel(); cityModel.setName(attributes.getValue(0)); cityModel.setId(attributes.getValue(1)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // 遇到结束标记的时候,会调用这个方法 if (qName.equals("city")) { cityList.add(cityModel); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { } }