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; }