解析xml除了SAX方式还有PULL方式,这种方式也是基于事件驱动的,与SAX方式一样,它就是PULL方式。只不过PULL方式读xml回调方法返回的是数字。
读取到xml的声明返回 START_DOCUMENT
读取到xml的结束返回 END_DOCUMENT
读取到xml的开始标签返回 START_TAG
读取到xml的结束标签返回 END_TAG
读取到xml的文本返回 TEXT
_ueditor_page_break_tag_
一个例子:
//获取存入的xml字符串 String PaiMaiXML=load(); List<String> data = new ArrayList<String>(); data.add("车牌列表"); ByteArrayInputStream tInputStringStream = null; try { if (PaiMaiXML != null && !PaiMaiXML.trim().equals("")) { tInputStringStream = new ByteArrayInputStream(PaiMaiXML.getBytes()); } } catch (Exception e) { // TODO: handle exception //tv1.setText(e.getMessage()); return; } XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(tInputStringStream, "UTF-8"); int eventType = parser.getEventType(); //List<PaiMaiInfo> PaiMaiList=new ArrayList<PaiMaiInfo>; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT:// 文档开始事件,可以进行数据初始化处理 // persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG:// 开始元素事件 String name = parser.getName(); if (name.equalsIgnoreCase("Base_tabletNumber")) { // currentPerson = new Person(); // currentPerson.setId(new // Integer(parser.getAttributeValue(null, "id"))); //tv1.setText(parser.nextText()); data.add(parser.nextText()); } // else if (currentPerson != null) { // if (name.equalsIgnoreCase("loginlink")) { // currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值 // } else if (name.equalsIgnoreCase("errmsg")) { // currentPerson.setAge(new Short(parser.nextText())); // } // } break; case XmlPullParser.END_TAG:// 结束元素事件 // if (parser.getName().equalsIgnoreCase("person") // && currentPerson != null) { // persons.add(currentPerson); // currentPerson = null; // } break; } eventType = parser.next(); } tInputStringStream.close(); // return persons; } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ListView listView = (ListView) findViewById(R.id.listView1); listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,data));
上面这段代码是处理xml字符串形式的,xml文件略作处理即可。即转文件流:
InputStream inputStream=null; //得到文件流,并设置编码方式 inputStream=this.context.getResources().getAssets().open(xmlPath); parser.setInput(inputStream, "utf-8");
和上面的对比
tInputStringStream = new ByteArrayInputStream(PaiMaiXML.getBytes()); parser.setInput(tInputStringStream, "UTF-8");