现在的位置: 首页 > 综合 > 正文

XML解析使用固定格式解析本地与解析Tomcat服务器上面的xml文件

2013年11月26日 ⁄ 综合 ⁄ 共 2842字 ⁄ 字号 评论关闭
1.新建一个类MenuHandler解析XML文档

public class MenuHandler extends DefaultHandler {
    private String preTAG;
    private List<Menu> list=null;
    private Menu menu=null;
    
    public MenuHandler(List<Menu> list){
        
        this.list=list;
    }
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        String dataString=new String(ch,start,length);
        
        if(preTAG.equals("id")){
//            System.out.println("name:"+""+dataString);
            menu.setId(dataString);
            
            
        }
        if(preTAG.equals("name")){
            menu.setName(dataString);
//            System.out.println("popu:"+""+dataString);
        }
        if(preTAG.equals("img_address")){
            
            menu.setImg_address(dataString);
//            System.out.println("intro:"+""+dataString);
        }
        
        
        super.characters(ch, start, length);
    }

    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // TODO Auto-generated method stub
        preTAG="";
        if(localName.equals("top10")){
            
            list.add(menu);
            
            
        }
        super.endElement(uri, localName, qName);
    }

    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        
        super.startDocument();
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        if(localName.equals("top10")){
            
            menu=new Menu();
        }
        preTAG=localName;
        super.startElement(uri, localName, qName, attributes);
    }
    
    

}

2.XML文档存放于/res/raw文件夹下,在代码中调用解析工厂进行解析

 private List<Message> parse(){
        SAXParserFactory factory=SAXParserFactory.newInstance();
        
        Message msg=null;
        
        try{
            
            XMLReader reader=factory.newSAXParser().getXMLReader();
            
            reader.setContentHandler(new MessageHandler(msgList));
            reader.parse(new InputSource(this.getResources().openRawResource(messageFileId)));
            for(Iterator iterator=msgList.iterator();iterator.hasNext();){
                
//                注意  此处获得迭代器中对象是靠  iterator.next()来获取的
                msg=(Message)iterator.next();
                Log.i("Info*****************************************>", msg.getMsg());
//                在此处将解析出来的数据放入到map中
                 HashMap<String,String> map2=new HashMap<String,String>();
                 map2.put("msg", "    "+msg.getMsg());
//                 Log.i("TAG", i+"   "+test_str[i]);
                 list.add(map2);
            }
            
        }catch(Exception e){}
        
        
        return msgList;
    }

3.XML文档存放于Tomcat服务器上调用解析器方法为:

private List<CaiYao> parse(){
        SAXParserFactory factory=SAXParserFactory.newInstance();
        
        CaiYao caiYao=null;
        
        try{
            
            XMLReader reader=factory.newSAXParser().getXMLReader();
            
            reader.setContentHandler(new CaiYaoHandler(list));
            
             
            //reader.parse(new InputSource(this.getResources().openRawResource(R.raw.cai1)));
            
           
            URL url = new URL("http://10.254.1.168:8080/YiDongMeiShi/cai1.xml");
            
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
           
            conn.setRequestMethod("GET");
            
            conn.setConnectTimeout(6*1000);
            
            if(conn.getResponseCode()== 200){
             //返回码为真
             //从服务器传递过来数据,是一个输入的动作。定义一个输入流,获取从服务器返回的数据
             InputStream inStream = conn.getInputStream();
             //得到输入流的数据之后,调用readStream方法对输入流进行处理。返回的一个字节数组。
             //按ctrl进入readStream方法,看看readStream是怎么处理的
            reader.parse(new InputSource(inStream));
            
            
            
            
            
            
            }  }catch(Exception e){}
        
        
        return list;
        } 

抱歉!评论已关闭.