android通过pull方式解析XML(dataset)的过程
在安卓客户端,通常调用非JAVA开发的webservice,本篇主要阐述调用过.net下C#开发的webservice的处理过程。
在.net通常返回的是Dataset对象,首先,我们需要在webservice中将dataset对象处理成标准的XML格式,处理过程如下
1 [WebMethod(Description = "获得个人信息")] 2 public object GetInfoXML(string name,string password) 3 { 4 AfarScmBLL.PartnerBll ab = new AfarScmBLL.PartnerBll(); 5 DataSet ds = ab.Get_PartnerInfo("00001", name); 6 System.Text.StringBuilder strbuilder = new System.Text.StringBuilder(); 7 StringWriter writer = new StringWriter(strbuilder); 8 ds.WriteXml(writer, System.Data.XmlWriteMode.IgnoreSchema); 9 return strbuilder.ToString(); 10 }
得到的是一串XML的字符串,如下格式有
<NewDataSet> <part> <c_no>1001</c_no> <c_name>金陇副食供应站</c_name> <c_link_tele>15981802704</c_link_tele> <c_link_email>253222680@qq.com</c_link_email> </part> <part> <c_no>1001</c_no> <c_name>金陇副食供应站</c_name> <c_link_tele>15981802704</c_link_tele> </part> </NewDataSet>
下边就是在安卓下通过PULL方式处理该字符串的过程,具体怎么得到请看上篇安卓调用.netwebservice,返回的为个人信息UserModel的对象
1 public UserModel Getak(String xml) 2 { 3 ByteArrayInputStream tInputStringStream = null; 4 tInputStringStream = new ByteArrayInputStream(xml.getBytes()); 5 XmlPullParser parser = Xml.newPullParser(); 6 try { 7 parser.setInput(tInputStringStream,"UTF-8"); 8 int eventType = parser.getEventType(); 9 while (eventType != XmlPullParser.END_DOCUMENT) 10 { 11 switch (eventType) 12 { 13 case XmlPullParser.START_DOCUMENT: 14 // persons = new ArrayList<Person>(); 15 break; 16 case XmlPullParser.START_TAG:// 开端元素事务 17 String name = parser.getName(); 18 if (name.equalsIgnoreCase("c_no")) 19 { 20 pe.setC_no(parser.nextText()); 21 22 } 23 if (name.equalsIgnoreCase("c_name")) 24 { 25 pe.setC_name(parser.nextText()); 26 27 28 } 29 if (name.equalsIgnoreCase("c_link_tele")) 30 { 31 pe.setC_link_tele(parser.nextText()); 32 33 34 } 35 if (name.equalsIgnoreCase("c_link_email")) 36 { 37 pe.setC_link_email(parser.nextText()); 38 39 40 } 41 break; 42 case XmlPullParser.END_TAG:// 停止元素事务 43 break; 44 } 45 eventType = parser.next(); 46 } 47 tInputStringStream.close(); 48 } 49 catch (XmlPullParserException e) 50 { 51 e.printStackTrace(); 52 } 53 catch (IOException e) 54 { 55 e.printStackTrace(); 56 } 57 return pe; 58 }
以上就是完整的处理过程,仅供参考