SAX解析xml文件

时间:2022-06-05 14:56:45

需要做一个银行名字的列表。

因为有很多,所以想到了用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文件里的所有值。