• SAX解析xml文件


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

    因为有很多,所以想到了用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文件里的所有值。
  • 相关阅读:
    Visual C#使用DirectX实现视频播放
    sql server中新增一条数据后返回该数据的ID
    JQuery上传插件Uploadify使用详解
    .NET JS escape加密的后台解密
    Redis Sentinel(哨兵模式)
    Redis集群入门
    Redis 4.0.X版本reshard出现错误的解决办法
    首层nginx 传递 二级代理,三级代理......多级代理nginx 客户端真实IP的方法
    Centos6 Ruby 1.8.7升级至Ruby 2.3.1的方法
    SQL Server 2008示例数据库安装问题解决
  • 原文地址:https://www.cnblogs.com/a446276468/p/5549954.html
Copyright © 2020-2023  润新知